У меня есть безопасный/дезинфицированный HTML-код, сохраненный в таблице DB.
Как я могу записать этот HTML-контент в виде Razor?
Он всегда избегает символов типа <
и амперсандов до &
.
У меня есть безопасный/дезинфицированный HTML-код, сохраненный в таблице DB.
Как я могу записать этот HTML-контент в виде Razor?
Он всегда избегает символов типа <
и амперсандов до &
.
Предположим, что ваш контент находится внутри строки с именем mystring
...
Вы можете использовать:
@Html.Raw(mystring)
В качестве альтернативы вы можете преобразовать свою строку в 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"); }
Иногда бывает сложно использовать raw html. В основном из-за уязвимости XSS. Если это вызывает беспокойство, но вы все еще хотите использовать raw html, вы можете закодировать страшные части.
@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")
Результаты в
(<b><script>console.log('insert')</script>Hello</b>)
Вы можете поместить свою строку в 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
Он кодирует почти всю возможную строку атаки XSS.