Url.Action ставить & amp; в моїй url, як я можу це вирішити?


90

Я хочу надіслати змінні 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, щоб поставити & перед другою змінною, яку я хочу надіслати?


Що змушує вас думати, що &це не нормально?
Оді

1
Тому що, коли я дивлюся на ActionResult з точкою зупинки, коли у мене є localhost: 1304 / Administration / blue / en-gb / Entity / CreateNote? ModelEntity = Phrase & amp; itemId = 44 modelEntity = Phrase and itemId = null. Коли я перевертаю їх у javascript і отримую localhost: 1304 / Administration / blue / en-gb / Entity / CreateNote? ItemId = 44 & amp; modelEntity = Phrase itemId = 44 і modelEntity = null. Тому я думаю, що це пов’язано з & amp;
Niek de Klein

4
@Oded - оскільки дані вставляються в JavaScript, а не в HTML.
Квентін

Відповіді:


127

Вчора я не помітив, що ви &думали, що редактор SO змінив це. Спробуйте загорнути Url.Action()в a, @Html.Raw()щоб запобігти кодуванню &.

Або ж лише Url.Action()біт контролера / дії та передає два параметри як дані після публікації, а не безпосередньо за URL-адресою, jQuery повинен відсортувати для вас таким чином.


43
Це рішення працює, але чому Url.Action навіть кодується? Розмова про несподівану поведінку.
Джеррі,

13

Я думаю, ваша проблема полягає в тому, Model.meta.PostAction- це властивість a 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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.