web-dev-qa-db-ja.com

ASP.NET MVC 3のデータベースから生のHtmlを表示することは可能ですか?

データベースにテーブルがあり、プロパティの1つがHTMLページ(html、head、bodyタグなし)であり、ビューの1つの中央に配置する予定です。たとえば、次のcotrollerメソッドを呼び出します。引数を取り、このhtmlの大きな文字列をモデルとして渡すビューを返します。私はそれを検索し(あまり認めない)、次の方法を見つけました。

<%= System.Web.HttpUtility.HtmlDecode(yourEncodedHtmlFromYouDatabase) %>

それが見つかりました ここstackoverflowで 私が同様のカミソリアプローチを試みたとき、私はこれで終わった:

@System.Web.HttpUtility.HtmlDecode("<h1>Test</h1>")

これはアイデアですが、計画どおりには機能しませんでした。

必要なのは:@Html.Raw(yourEncodedHtmlFromYouDatabase)

データベース内のhtmlが適切にサニタイズされている(または少なくとも信頼できるソースから)と仮定しています。そうでない場合は、クロスサイトスクリプティング攻撃にさらされる可能性があるからです。

アプローチが機能しなかった理由は、デフォルトでRazorがHTML出力をエンコードするためです(@何かを表示します)。 Html.Rawは、あなたがHTMLを信頼し、エンコードせずに表示したいことをRazorに伝えます(既に生のHTMLであるため)。

89
Bennor McCarthy

HTMLStringを返すこともできます。たとえば、Razorは正しいフォーマットを出力します。

@Html.GetSomeHtml()

public static HtmlString GetSomeHtml()
{
    var Data = "abc<br/>123";
    return new HtmlString(Data);
}

これにより、HTMLを表示できます

12
LiamB