Asp.net-Mvc

具有多個路由值的 Url.Action 助手的問題

  • October 28, 2015

我目前正在 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",但是bnull

這是期望的行為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”中的結果

引用自:https://stackoverflow.com/questions/15424380