Url.Action ставит & в моем URL, как я могу решить это? - PullRequest
81 голосов
/ 03 января 2012

Я хочу отправить переменные 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});

Однако отправляемый 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 поставить & перед второй переменной, которую я хочу отправить?

Ответы [ 3 ]

117 голосов
/ 03 января 2012

Вчера я не заметил, что у вас есть & Я думал, что это так, редактор SO изменил это.Попробуйте обернуть ваш Url.Action() в @Html.Raw(), чтобы предотвратить кодирование &.

или, в качестве альтернативы, только Url.Action() бит контроллера / действия и передать эти два параметра как данные для передачи, а не непосредственно в URLJQuery должен подобрать для вас & 's таким образом.

13 голосов
/ 03 января 2012

Я думаю, что ваша проблема с Model.meta.PostAction - это свойство string?

Если это так, то я думаю, что вы добавляете его на страницу с помощью:

  • Бритва: @Model.meta.PostAction
  • ASP view engine: <%: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);
0 голосов
/ 17 марта 2017

Попробуйте это на вашем JS

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