Отключить кодировку HTML в Razor
У меня есть функция, которая возвращает фрагмент JavaScript и / или HTML.
static public string SpeakEvil()
{
return "<script>alert('BLAH!!');</script>";
}
С точки зрения Razor вполне справедливо кодирует его HTML, как и следовало ожидать.
@StaticFunctions.SpeakEvil()
Как я могу Razor не HTML кодировать это, так что HTML и JavaScript излучаются дословно, и что любой сценарий фактически выполняется?
3 ответа:
Вы можете использовать функцию
Raw()
, но она в основном предназначена для вещей, которые приходят из базы данных.Для такого помощника, как у вас, я бы предложил вернуть
IHtmlString
:static public IHtmlString SpeakEvil() { return new HtmlString("<script>alert('BLAH!!');</script>"); }
Таким образом, вам не придется звонить
Raw()
на каждый узел вызова.
Используйте
Html.Raw
помощник.@Html.Raw(StaticFunctions.SpeakEvil())
Возвращает a
MvcHtmlString
(наследуется отHtmlString
), вызывая методMvcHtmlString.Create()
следующим образом:public static MvcHtmlString SpeakEvil() { return MvcHtmlString.Create("<script>alert('BLAH!!');</script>"); }
Вы также можете сделать его расширением строки:public static MvcHtmlString HtmlSafe(this string content) { return MvcHtmlString.Create(content); }