Отключить кодировку HTML в Razor


У меня есть функция, которая возвращает фрагмент JavaScript и / или HTML.

static public string SpeakEvil()
{
    return "<script>alert('BLAH!!');</script>";
}

С точки зрения Razor вполне справедливо кодирует его HTML, как и следовало ожидать.

@StaticFunctions.SpeakEvil()

Как я могу Razor не HTML кодировать это, так что HTML и JavaScript излучаются дословно, и что любой сценарий фактически выполняется?

3 21

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);
}


Source:
http://geekswithblogs.net/shaunxu/archive/2010/04/10/lt-gt-htmlencode-ihtmlstring-and-mvchtmlstring.aspx