Подтвердить что ты не робот

Отключить кодирование HTML в бритве

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

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

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

@StaticFunctions.SpeakEvil()

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

@Html.Raw(StaticFunctions.SpeakEvil())

Ответ 3

Верните 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);
}


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