问题
I want to send the variables itemId and entityModel to the ActionResult CreateNote:
public ActionResult CreateNote(
[ModelBinder(typeof(Models.JsonModelBinder))]
NoteModel Model, string cmd, long? itemId, string modelEntity)
with this javascript:
Model.meta.PostAction = Url.Action("CreateNote", new { cmd = "Save", itemId = itemId, modelEntity = modelEntity});
However, the url being send is
localhost:1304/Administration/blue/en-gb/Entity/CreateNote?modelEntity=Phrase&itemId=44
I want to send
localhost:1304/Administration/blue/en-gb/Entity/CreateNote?modelEntity=Phrase&itemId=44
How can I prevent Url.Action to put the & in front of the second variable that I want to send?
回答1:
I didn't notice yesterday that you had &
I thought that was the SO editor had changed that. Try wrapping your Url.Action()
in a @Html.Raw()
to prevent the Encode of &.
Or alternatively only Url.Action()
the controller/action bit and pass the two parameters as post data rather than directly on the url, jQuery should sort out the &'s for you that way.
回答2:
I think your problem is with Model.meta.PostAction
- is that property a string
?
If so then my guess would be that you're adding it to the page with either:
- Razor:
@Model.meta.PostAction
- ASP view engine:
<%:Model.meta.PostAction%>
Both of which automatically encode that string for you.
To fix it either use @Html.Raw()
/<%=
(both of which don't encode) or make the PostAction
property an IHtmlString
that knows that it's already been encoded:
string actionUrl = Url.Action("CreateNote", new { cmd = "Save", itemId = itemId, modelEntity = modelEntity});
Model.meta.PostAction = new HtmlString(actionUrl);
回答3:
Try this on your JS
myUrl = myUrl.replace(/&/g, "&");
来源:https://stackoverflow.com/questions/8711521/url-action-puts-an-amp-in-my-url-how-can-i-solve-this