Как обойти кодировку HTML при использовании Html.ActionLink в Mvc? - PullRequest
41 голосов
/ 08 января 2009

Всякий раз, когда я использую Html.ActionLink, всегда Html кодирует мою строку отображения. Например, я хочу, чтобы моя ссылка выглядела так:

<a href="/posts/422/My-Post-Title-Here">More&hellip;</a>

выводится так: More & hellip;

& hellip это "...", если вам интересно.

Однако actionlink выводит фактический текст "& hellip;" как текст ссылки. У меня та же проблема, если я хочу вывести это:

<a href="/posts/422/My-Post-Title-Here"><em>My-Post-Title-Here</em></a>

Я получаю: My-Post-Title-вот

Есть идеи, как это сделать?

Ответы [ 5 ]

79 голосов
/ 08 января 2009

Похоже, что ActionLink всегда использует вызовы HttpUtility.Encode в тексте ссылки. Вы можете использовать UrlHelper для генерации href и создания тега привязки самостоятельно.

<a href='@Url.Action("Posts", ...)'>More&hellip;</a>

В качестве альтернативы вы можете «декодировать» строку, которую вы передаете в ActionLink. Создание ссылки в HTML кажется немного более читабельным (для меня) - особенно в Razor. Ниже приведен эквивалент для сравнения.

@Html.ActionLink(HttpUtility.HtmlDecode("More&hellip;"), "Posts", ...)
10 голосов
/ 13 апреля 2012

Ответ, данный Сэмом, на самом деле правильный, и я использовал его в своем решении, поэтому я попробовал его сам. Вы можете удалить лишние скобки, чтобы они выглядели примерно так:

@Html.ActionLink(HttpUtility.HtmlDecode("&amp;"), "Index", "Home")
7 голосов
/ 30 апреля 2012

Проверьте это:

  <p>Some text   @(new HtmlString(stringToPaste)) </p>
7 голосов
/ 08 января 2009

В качестве альтернативы, просто используйте символ многоточия Unicode \ u2026 и позвольте MVC беспокоиться о том, как его кодировать. Если нет какой-либо особенно веской причины, вам бы понадобилась ссылка на сущность адского слова, а не ссылка на символ или просто включение символа в виде простых байтов UTF-8.

Альтернативно альтернатива: просто используйте три периода. Многоточие (U + 2026) является символом совместимости, включенным только в оба конца к кодировкам, предшествующим Unicode. Это дает вам очень мало по сравнению с простыми точками.

4 голосов
/ 19 августа 2011

Расшифруйте его перед передачей значения. Просто возникла такая же проблема (разные символы), и она отлично работает:

Например:

@Html.ActionLink(HttpUtility.HtmlDecode(_("&amp;")), "Index", "Home")

Раздражает, хотя

...