eca*_*ver 12 url asp.net-mvc query-string razor asp.net-mvc-3
我目前正在VS2010中开发一个ASP.NET MVC3应用程序,而且我在使用@Url.Action
帮助器时遇到了一些麻烦.我有一个ajax请求,我使用这个帮助器:
var url = '@Url.Action("Action", "Controler", new { a = "a", b = "b" })';
$.post(url).success(function(data) {
...
});
Run Code Online (Sandbox Code Playgroud)
问题是url
此后的值是/Controller/Action?a=a&b=b
,注意&
路由值之间的值.这不起作用,但如果我这样做:
var url = '@Url.Action("Action", "Controler", new { a = "a", b = "b" })'.replace('amp;', '');
Run Code Online (Sandbox Code Playgroud)
它完美地工作!
我的行动是这样的:
public JsonResult Action(string a, string b)
{
...
}
Run Code Online (Sandbox Code Playgroud)
我已经调试我的应用程序和动作被调用,甚至a
就是"a"
,不过b
是null
.
这是期望的行为Url.Action
吗?我不这么认为.请帮帮我,我做错了什么?我应该在Url.Action
通话中添加其他参数吗?提前致谢.
这里的问题是当你使用razor语法时:@...
razor引擎将Url.Action(这是一个字符串)的结果编码为MvcHtmlString.这导致&符编码为&
.要解决此问题,请使用Html.Raw
(返回非HTML编码的标记.)
var url = '@Html.Raw(Url.Action("Action", "Controller", new { a = "a", b = "b" }))';
导致:'/ Controller/Action?a = a&b = b'
感谢@GSerg(请参阅Dave Alperovich的回答中的评论)......但是期望的结果不是javascript编码.HttpUtility.JavaScriptStringEncode("&")
在"\ u0026"中使用结果
不是你。Javascript将&识别为受保护字符并对其进行“编码”
你找到了一种解决方法,我也见过其他方法。因为这个问题不是问最好的方式,但无论是不是你,我可以向你保证,这不是你。你没有做任何明显错误的事情。这是 Javascript 的自然行为。
如果我们讨论最佳方法,我更喜欢@Url.Action
仅使用它来获取 URL,并将参数作为参数传递给我的 JQuery 方法(.Ajax 方法是我最喜欢的)。
借自 e.camper 的示例
$.post(url, { a: "a", b: "b"}).success(...)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10634 次 |
最近记录: |