Отключить кодировку 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); }