Url.Action将& 在我的url,我该如何解决这个问题?

我想发送variablesitemId和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}); 

但是,正在发送的url是

 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把&放在我想发送的第二个variables的前面?

我昨天没有注意到你有& 我以为是SO编辑改变了这个。 尝试在@Html.Raw()包装你的Url.Action()以防止&的编码。

或者,也可能只有Url.Action()控制器/动作位,并传递两个参数作为发布数据,而不是直接在URL上,jQuery应该为你解决这个问题。

我认为你的问题是与Model.meta.PostAction – 是一个string属性?

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

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

两者都会自动为您编码该string。

要解决这个问题,可以使用@Html.Raw() / <%= (两者都不编码),或者让PostAction属性成为一个IHtmlString ,它知道它已经被编码了:

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

尝试一下你的JS

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