参数值在行动中缺少'#'

时间:2013-06-11 09:00:42

标签: c# javascript asp.net-mvc-4

我只是打电话给

window.location = '../MyController/MyAction?campId=' + campId + '&campName=' + campName;

并且正在接受它作为

[HttpGet]
    public ActionResult MyAction(int campId, string campName)
    {

...

我的问题来自于js am传递了campName值'Anish#'但是在行动中我只得到'Anish'。在没有采取行动的#之后的价值。我怎么能解决这个问题呢。

任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:5)

您需要使用encodeURIComponent javascript函数对所有参数进行URL编码:

window.location.href = '../MyController/MyAction?' + 
    'campId=' + encodeURIComponent(campId) + 
    '&campName=' + encodeURIComponent(campName);

或者如果您使用的是jQuery,您可以使用$.param()函数来处理对参数值进行正确的URL编码:

var parameters = $.param({ campId: campId, campName: campName });
window.location.href = '../MyController/MyAction?' + parameters;

答案 1 :(得分:1)

这里的问题是#字符用于将URL的客户端部分与服务器部分分开。

E.g。

http://www.example.com/where?this_is=a_param#this_can_be_an_anchor_name

我不相信客户端的URL片段(即#之后的数据)会被返回到浏览器。

如果您要做的是返回#作为参数值的一部分,那么URL编码参数值将在Darin的答案中讨论,这将为您解决此问题。