Как я могу показать viewbag как HTML? - PullRequest
27 голосов
/ 02 сентября 2011

ОК, совершенно новый для ASP.Net MVC, так что извините, если это глупый вопрос, но как мне показать значения ViewBag в виде HTML.Например, если ViewBag.SomeMessage содержит следующий текст:

<h3>Test</h3><p>Test</p><p>Test</p><p>Test</p><p>Test</p><p>TEST</p>

Как бы мне было на самом деле заставить страницу отображать это как обычный HTML?Или есть гораздо более простой способ добиться этого, которого я полностью упускаю?

Приветствия!

Ответы [ 5 ]

58 голосов
/ 02 сентября 2011

Все правы в использовании @Html.Raw(), но я хочу отметить, что нужно быть осторожным с этим, так как это может сделать ваш сайт уязвимым для XSS-уязвимостей.

Я бы объединил @Html.Raw(ViewBag.SomeMessage) с Microsoft Anti-XSS Library , чтобы убедиться, что вы не вносите никаких уязвимостей из этого.

Edit: Преимущество библиотеки Anti-XSS (если вы еще не смотрели ее) состоит в том, что она имеет белый список утвержденных наценок (таких как <b>, <h3> и т. Д.), Так что только утвержденные наценки будут отменены. закодированный.

Edit2: Вот пример того, как это делается.

18 голосов
/ 02 сентября 2011

Вы бы использовали метод Raw:

 @Html.Raw(ViewBag.SomeMessage)
8 голосов
/ 02 сентября 2011

Я думаю, вы можете сделать что-то вроде этого:

@Html.Raw(ViewBag.SomeMessage)
7 голосов
/ 02 сентября 2011
@Html.Raw(ViewBag.SomeHtmlProperty)

Как говорится, вот мой отказ от ответственности: НЕ ИСПОЛЬЗУЙТЕ ViewBag. Используйте строго типизированные виды и модели просмотра. ViewBag / ViewData - это рак для приложения ASP.NET MVC.

1 голос
/ 15 декабря 2016

помещает данные в ViewBag в виде строки в кодировке HTML, которую не следует кодировать снова.

ViewBag.myBag = MvcHtmlString.Create(myCode ?? string.Empty);

затем используйте

@ViewBag.myBag

Документация для MvcHtmlString.

...