JavaScriptやHTMLのスニペットを返す関数があります。
static public string SpeakEvil()
{
return "<script>alert('BLAH!!');</script>";
}
ビューでは、ほとんどの人が期待するように、Razorは非常に正しくHTMLエンコードされています。
@StaticFunctions.SpeakEvil()
Razor not HTMLをエンコードするにはどうすればよいですか?HTMLとJavaScriptが逐語的に出力され、スクリプトが実際に実行されるようにするにはどうすればよいですか?
Raw()
関数を使用することもできますが、これは主にデータベースからの関数を対象としています。
あなたのようなヘルパーの場合は、IHtmlString
を返すことをお勧めします。
_static public IHtmlString SpeakEvil() {
return new HtmlString("<script>alert('BLAH!!');</script>");
}
_
そうすれば、すべてのコールサイトでRaw()
を呼び出す必要はありません。
使用 - Html.Raw
ヘルパー。
@Html.Raw(StaticFunctions.SpeakEvil())
次のようにMvcHtmlString.Create()
メソッドを呼び出すことにより、MvcHtmlString
(HtmlString
から継承)を返します。
public static MvcHtmlString SpeakEvil()
{
return MvcHtmlString.Create("<script>alert('BLAH!!');</script>");
}
文字列拡張子にすることもできます:
public static MvcHtmlString HtmlSafe(this string content)
{
return MvcHtmlString.Create(content);
}