Razor - @Html.Raw() все еще кодирует атрибуты метатегов

Когда я использую @Html.Raw(mystring) normal, он правильно отображает пример:

@{ ViewBag.Title = "My Site®"; }
<title>@Html.Raw(ViewBag.Title)</title>

Будет правильно отображать <title>My Site&reg;</title>, но когда я использую его в атрибуте:

<meta name="description" content="@Html.Raw(ViewBag.Title)" />

Он отображает <meta name="description" content="My Site&amp;reg;" />, что неверно, потому что тогда он не будет отображать зарегистрированный знак.

Как исправить такое поведение?


person ddilsaver    schedule 15.02.2013    source источник
comment
Дубликат: stackoverflow.com/questions/11963453/ и stackoverflow.com/ вопросы/12321616/   -  person Justin Helgerson    schedule 15.02.2013
comment
@ Ek0nomik Ek0nomik На самом деле это не дубликат, потому что никто не решил этот вопрос. Они предложили загрузить весь тег ‹meta /› в строку, и это глупо делать на каждой странице.   -  person ddilsaver    schedule 15.02.2013
comment
Вы можете просто включить имя атрибута в параметр .Raw, как показано во втором вопросе, указанном выше. Вам придется поработать, так как это ошибка: aspnetwebstack.codeplex.com/workitem /393.   -  person Justin Helgerson    schedule 15.02.2013
comment
@Ek0nomik Я не увидел второй вопрос, когда впервые посмотрел. У него было лучшее решение. Вы можете опубликовать его как ответ, если хотите. В противном случае я опубликую свое кодовое решение, чтобы оно было доступно.   -  person ddilsaver    schedule 15.02.2013
comment
Не волнуйтесь. Я добавил ответ. Удачи!   -  person Justin Helgerson    schedule 15.02.2013


Ответы (3)


Как patridge указал в своем ответе, вы можете просто включить разметку атрибута в параметр .Raw.

В вашем случае это приведет к чему-то похожему на следующее:

<meta name="description" @Html.Raw("content=\"My Site&amp;reg;\"") />
person Justin Helgerson    schedule 15.02.2013
comment
@Justin Helgerson На самом деле, это единственный способ заставить это работать, спасибо! - person Oscar Ortiz; 19.05.2016

Вы можете сделать это в своем _layout.cshtml:

<title>@{var title = new HtmlString(ViewBag.Title);}@title</title>

Это сработало для меня.

person Kostas Petrianakis    schedule 24.01.2014

Я думаю, что это верхнее решение:

@{ ViewBag.Title = "My Site&reg;"; }
<title>@Html.Raw(ViewBag.Title)</title>
<meta name="description" content="@HttpUtility.HtmlDecode(ViewBag.Title)" />
person Landeeyo    schedule 16.01.2015