Запись / вывод строк HTML без экранирования - PullRequest
417 голосов
/ 26 ноября 2010

У меня есть безопасный / продезинфицированный HTML, сохраненный в таблице БД.

Как мне записать этот HTML-контент в виде Razor?

Всегда экранирует символы типа < и амперсанды до &amp;.

Ответы [ 6 ]

629 голосов
/ 26 ноября 2010

Предположим, что ваш контент находится внутри строки с именем mystring ...

Вы можете использовать:

@Html.Raw(mystring)

В качестве альтернативы вы можете преобразовать вашу строку в HtmlString или любой другой тип, который реализует IHtmlString в модели или непосредственно в строке и использует обычный @:

@{ var myHtmlString = new HtmlString(mystring);}
@myHtmlString
75 голосов
/ 23 февраля 2011

В ASP.NET MVC 3 вы должны сделать что-то вроде этого:

// Say you have a bit of HTML like this in your controller:
ViewBag.Stuff = "<li>Menu</li>"
//  Then you can do this in your view:
@MvcHtmlString.Create(ViewBag.Stuff)
58 голосов
/ 12 мая 2014

Вы можете использовать

@{ WriteLiteral("html string"); }
11 голосов
/ 14 октября 2014

Иногда бывает сложно использовать необработанный HTML.Главным образом из-за уязвимости XSS.Если это вызывает озабоченность, но вы все еще хотите использовать необработанный HTML, вы можете закодировать страшные части.

4 голосов
/ 12 мая 2014

Вы можете поместить свою строку в viewdata в контроллере следующим образом:

 ViewData["string"] = DBstring;

И затем вызвать эти viewdata в виде, подобном этому:

@Html.Raw(ViewData["string"].ToString())
2 голосов
/ 29 марта 2012

Помимо использования @MvcHtmlString.Create(ViewBag.Stuff) в соответствии с предложением Dommer, я предлагаю вам также использовать библиотеку AntiXSS в качестве рекомендуемого phill http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx

Кодирует практически все возможные строки атаки XSS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...