具有多個路由值的 Url.Action 助手的問題
我目前正在 VS2010 中開發一個 ASP.NET MVC3 應用程序,但我在使用
@Url.Action助手時遇到了一些麻煩。我有一個使用這個助手的 ajax 請求:var url = '@Url.Action("Action", "Controler", new { a = "a", b = "b" })'; $.post(url).success(function(data) { ... });問題是
urlafter this 的值是/Controller/Action?a=a&b=b,注意&路由值之間的值。這不起作用,但如果我這樣做:var url = '@Url.Action("Action", "Controler", new { a = "a", b = "b" })'.replace('amp;', '');它完美地工作!
我的動作是這樣的:
public JsonResult Action(string a, string b) { ... }我已經調試了我的應用程序,並且該操作被呼叫,甚至
a是"a",但是b是null。這是期望的行為
Url.Action嗎?我不這麼認為。請幫助我,我做錯了什麼?我應該在Url.Action呼叫中添加另一個參數嗎?提前致謝。
不是你。Javascript將**&**標識為受保護字元並“對其進行編碼”
你找到了一種繞過它的方法,我見過其他人。因為這個問題不是問最好的方法,但不管是不是你,我可以向你保證它不是你。你沒有做錯任何事情。這是 Javascript 的自然行為。
如果我們正在討論最好的方法,我更喜歡
@Url.Action只使用來獲取我的 URL,並將參數作為參數傳遞給我的 JQuery 方法(我最喜歡 .Ajax 方法)。從 e.camper 借來的例子
$.post(url, { a: "a", b: "b"}).success(...)
這裡的問題是,當您使用 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”中的結果