web-dev-qa-db-ja.com

RazorでHTMLエンコーディングをオフにする

JavaScriptやHTMLのスニペットを返す関数があります。

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

ビューでは、ほとんどの人が期待するように、Razorは非常に正しくHTMLエンコードされています。

@StaticFunctions.SpeakEvil()

Razor not HTMLをエンコードするにはどうすればよいですか?HTMLとJavaScriptが逐語的に出力され、スクリプトが実際に実行されるようにするにはどうすればよいですか?

23
Damien Sawyer

Raw()関数を使用することもできますが、これは主にデータベースからの関数を対象としています。

あなたのようなヘルパーの場合は、IHtmlStringを返すことをお勧めします。

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

そうすれば、すべてのコールサイトでRaw()を呼び出す必要はありません。

51
marcind

使用 - Html.Raw ヘルパー。

@Html.Raw(StaticFunctions.SpeakEvil())
37
Oded

次のようにMvcHtmlString.Create()メソッドを呼び出すことにより、MvcHtmlStringHtmlStringから継承)を返します。

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

4
Nikkelmann