У меня есть безопасный / продезинфицированный HTML, сохраненный в таблице БД.
Как мне записать этот HTML-контент в виде Razor?
Всегда экранирует символы типа < и амперсанды до &.
<
&
Предположим, что ваш контент находится внутри строки с именем mystring ...
mystring
Вы можете использовать:
@Html.Raw(mystring)
В качестве альтернативы вы можете преобразовать вашу строку в HtmlString или любой другой тип, который реализует IHtmlString в модели или непосредственно в строке и использует обычный @:
HtmlString
IHtmlString
@
@{ var myHtmlString = new HtmlString(mystring);} @myHtmlString
В 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)
Вы можете использовать
@{ WriteLiteral("html string"); }
Иногда бывает сложно использовать необработанный HTML.Главным образом из-за уязвимости XSS.Если это вызывает озабоченность, но вы все еще хотите использовать необработанный HTML, вы можете закодировать страшные части.
Вы можете поместить свою строку в viewdata в контроллере следующим образом:
ViewData["string"] = DBstring;
И затем вызвать эти viewdata в виде, подобном этому:
@Html.Raw(ViewData["string"].ToString())
Помимо использования @MvcHtmlString.Create(ViewBag.Stuff) в соответствии с предложением Dommer, я предлагаю вам также использовать библиотеку AntiXSS в качестве рекомендуемого phill http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx
@MvcHtmlString.Create(ViewBag.Stuff)
Кодирует практически все возможные строки атаки XSS.