Отключить кодировку HTML в Razor
у меня есть функция, которая возвращает фрагмент JavaScript и/или HTML.
static public string SpeakEvil()
{
return "<script>alert('BLAH!!');</script>";
}
в представлении Razor вполне справедливо кодирует HTML, как и следовало ожидать.
@StaticFunctions.SpeakEvil()
как у меня есть бритва не HTML кодирует это, так что HTML и JavaScript испускаются дословно, и что любой скрипт действительно работает?
3 ответов
можно использовать Raw()
функция, но она в основном предназначена для вещей, которые поступают из базы данных.
для такого помощника, как у вас, я бы предложил вернуть IHtmlString
:
static public IHtmlString SpeakEvil() {
return new HtmlString("<script>alert('BLAH!!');</script>");
}
таким образом, вам не придется звонить Raw()
на каждом callsite.
возвратить 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);
}