Как обойти кодировку HTML при использовании Html.ActionLink в Mvc?

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

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

он выводится так: Подробнее

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

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

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

Я заканчиваю: ‹em› My-Post-Title-Here ‹/em›

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


person Micah    schedule 08.01.2009    source источник


Ответы (5)


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

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

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

@Html.ActionLink(HttpUtility.HtmlDecode("More&hellip;"), "Posts", ...)
person tvanfosson    schedule 08.01.2009
comment
@tvanfosson почти 4 года спустя ... это по-прежнему лучший метод для вставки специальных символов, таких как амперсанды, каретки и т. д., в текст ссылки? - person one.beat.consumer; 09.11.2012
comment
@ one.beat.consumer Я так думаю, но есть альтернатива, которую я добавил. Также обновлено, чтобы отразить синтаксис Razor. - person tvanfosson; 09.11.2012
comment
Расширения Mvc Html - это мусор, для большей мощности попробуйте библиотеку HtmlTags Fubu MVC, затем вы можете написать свои собственные (лучшие) методы расширения, которые возвращают HtmlTags, а не MvcHtmlString - person Sam; 11.12.2013
comment
Для MVC5 они переименовали метод Decode в HtmlDecode @ Html.ActionLink (HttpUtility.HtmlDecode (More), Posts, ...) - person klingu; 18.02.2014

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

@Html.ActionLink(HttpUtility.HtmlDecode("&amp;"), "Index", "Home")
person oogway    schedule 13.04.2012

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

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

person bobince    schedule 08.01.2009
comment
Многоточие семантически более значимо, чем три точки. Кроме того, обычно он отображается лучше. - person bdesham; 15.10.2012

Посмотрите это:

  <p>Some text   @(new HtmlString(stringToPaste)) </p>
person Pavel Shkleinik    schedule 30.04.2012

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

Eg:

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

Хотя раздражает

person Sam    schedule 19.08.2011