使用 Url.action 调用控制器方法时仅获取第一个参数值。

Posted

技术标签:

【中文标题】使用 Url.action 调用控制器方法时仅获取第一个参数值。【英文标题】:Only first parameter value is getting while calling controller method using Url.action. 【发布时间】:2013-01-29 21:13:43 【问题描述】:

我正在使用Url.action 之类的方式调用控制器方法,

location.href = '@Url.Action("Display", "Customer", new  username = "abc",name = "abcdef",country = "India",email = "abc@hmail.com",phone = "9456974545")';

我的控制器方法是,

public void Display(string username, string name, string country, string email, string phone)
    

在这个方法中,我只能得到第一个参数的值(username)。它没有得到传递的其他参数值。所有其他值为空。

请给我建议,有什么问题?

【问题讨论】:

点击ActionLink时浏览器地址栏能看到查询字符串参数吗? 是的。我可以在浏览器地址栏中看到查询字符串参数。网址是这样的:localhost:60710/Customer/… 这是什么?粘贴到这里 localhost:60710/Customer/… 嗯.. 像这样试试@html.Raw(@Url.Action("Display","Customer", new username = "abc",name = "abcdef")) 【参考方案1】:

默认情况下,使用 @ 块发出的每个内容(不是 IHtmlString)都会被 Razor 自动 HTML encoded

所以,@Url.Action() 也被编码,你得到的是纯文本。而& 编码为&

如果你不想编码,那么你应该使用@Html.Raw(@Url.Action("",""))

你的问题的答案是:

location.href = '@Html.Raw(@Url.Action("Display", "Customer", new  username = "abc",name = "abcdef",country = "India",email = "abc@hmail.com",phone = "9456974545"))';

希望对你有帮助

【讨论】:

【参考方案2】:

'&' 被编码为 '&' 时出现问题

模型绑定器无法识别此值。您需要通过使用 Html.Raw 函数呈现链接来防止这种编码。

使用'@Html.Raw(Url.Action......)'

【讨论】:

以上是关于使用 Url.action 调用控制器方法时仅获取第一个参数值。的主要内容,如果未能解决你的问题,请参考以下文章

@Url.Action("Action","Controller") 调用同名的 post 和 get 方法

Ajax调用从extjs到Yii action url不显示post数据

使用内联方式展示Razor视图

剃刀页面视图模型类中的 Url.Action 备用

接收 POST 请求但从未调用的操作方法

通过 Url.Action 将参数发送到 asp.net MVC 中的控制器