Отключить кодировку HTML в Razor - PullRequest
22 голосов
/ 11 февраля 2011

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

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

По-видимому, Razor вполне правильно использует HTML-кодировку, как и следовало ожидать.

@StaticFunctions.SpeakEvil()

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

Ответы [ 3 ]

51 голосов
/ 11 февраля 2011

Вы можете использовать функцию Raw(), но она в основном предназначена для вещей, которые поступают из базы данных.

Для такого помощника, как вы, я бы предложил вернуть IHtmlString:

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

Таким образом, вам не нужно звонить Raw() на каждом участке вызова.

37 голосов
/ 11 февраля 2011

Используйте помощник Html.Raw.

@Html.Raw(StaticFunctions.SpeakEvil())
4 голосов
/ 31 октября 2011

Возвращает MvcHtmlString (Наследует от HtmlString), вызывая метод MvcHtmlString.Create() следующим образом:

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

Вы также можете превратить его в расширение String:

public static MvcHtmlString HtmlSafe(this string content)
{
    return MvcHtmlString.Create(content);
}

Источник:http://geekswithblogs.net/shaunxu/archive/2010/04/10/lt-gt-htmlencode-ihtmlstring-and-mvchtmlstring.aspx

...