Сохранить ${name} в значениях маршрута Url.Action для использования с jquery.tmpl?

Здесь я немного отклоняюсь от проторенной дорожки, но это не кажется слишком неразумным.

В представлении с этим кодом:

<div>Hello ${Name}</div>

Запустив файл jquery.tmpl с {Id: 1, Name = "Bob" }, вы увидите на клиенте следующее:

<div>Hello Bob</div>

Это здорово и все такое, но давайте представим URL:

В представлении с этим кодом:

<div>Hello <a href="<%: Url.Action("Profile", new { id= "${Id}" }) %>">${Name}</a></div>

Оказывает на:

<div>Hello <a href="/User/Profile?id=%24%7BId%7D">${Name}</a></div>

И после запуска jquery.tmpl закодированный тег Id не подхватывается:

 <div>Hello <a href="/User/Profile?id=%24%7BId%7D">Bob</a></div>

Я понимаю, почему это происходит, но то, с чем я борюсь, - это способ предотвратить кодирование значений маршрута. Я теряю след после того, как какое-то время копался в декомпилированном коде, фактический механизм кодирования ускользает от меня. Если бы это был я, я бы преобразовал значения маршрута в HttpNameCollection и ToString, например, используя HttpUtility.Parse().

MVC был удивительно гибок в таких вещах, поэтому мне трудно поверить, что я не могу изменить кодировщик или обернуть значения маршрута с помощью MvcHtmlString или чего-то подобного.

Как я могу получить Url.Action, будь то из расширений UrlHelper или замененного и расширенного кодировщика, сохранить значения маршрута с форматами jquery.tmpl: ${value}


person Levitikon    schedule 12.08.2013    source источник


Ответы (1)


Не самый красивый способ, но вы можете обернуть его в функцию Server.UrlDecode. Таким образом, ваш код будет выглядеть так

<a href="<%: Server.UrlDecode(Url.Action("Profile", new { id= "${Id}" })) %>">${Name}</a>

Это выведет /User/Profile?id=${id}

Альтернативный способ — создать свой собственный помощник Html, который будет возвращать ввод RAW, а не кодировать его. Мне пришлось сделать что-то подобное с ActionLink. Взгляните на мою запись в блоге об этом. MVC ActionLink с содержимым HTML.

person Tim B James    schedule 12.08.2013