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


использовать Html.Raw помощником.

@Html.Raw(StaticFunctions.SpeakEvil())

возвратить 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