Url.Action提出了一个&在我的网址中,我该如何解决这个问题?

时间:2012-01-03 11:22:59

标签: c# javascript jquery url.action

我想将变量itemId和entityModel发送到ActionResult CreateNote:

public ActionResult CreateNote(
        [ModelBinder(typeof(Models.JsonModelBinder))]
        NoteModel Model, string cmd, long? itemId, string modelEntity)

使用此javascript:

Model.meta.PostAction = Url.Action("CreateNote", new { cmd = "Save", itemId = itemId, modelEntity = modelEntity});

但是,发送的网址是

localhost:1304/Administration/blue/en-gb/Entity/CreateNote?modelEntity=Phrase&itemId=44     

我想发送

localhost:1304/Administration/blue/en-gb/Entity/CreateNote?modelEntity=Phrase&itemId=44

如何防止Url.Action放入&在我要发送的第二个变量前面?

3 个答案:

答案 0 :(得分:117)

昨天我没有注意到你有&我认为SO编辑改变了这一点。尝试将Url.Action()包裹在@Html.Raw()中以阻止编码&。

或者只有Url.Action()控制器/动作位并将这两个参数作为发布数据而不是直接传递给url,jQuery应该以这种方式为你排序。

答案 1 :(得分:13)

我认为您的问题出在Model.meta.PostAction - 该属性是string吗?

如果是这样,那么我的猜测就是你将它添加到页面中:

  • 剃刀:@Model.meta.PostAction
  • ASP视图引擎:<%:Model.meta.PostAction%>

两者都会自动为您编码该字符串。

要解决此问题,请使用@Html.Raw() / <%=(两者都不编码)或将PostAction属性设为IHtmlString,知道它已被编码:

string actionUrl = Url.Action("CreateNote", new { cmd = "Save", itemId = itemId, modelEntity = modelEntity});
Model.meta.PostAction = new HtmlString(actionUrl);

答案 2 :(得分:-2)

在您的JS上试试

myUrl = myUrl.replace(/&amp;/g, "&");