エスケープされていないHTML文字列の書き込み/出力


436

安全で無害化されたHTMLをDBテーブルに保存しました。

このHTMLコンテンツをRazorビューで書き出すにはどうすればよいですか?

<アンパサンドなどの文字は常にエスケープされ&amp;ます。


76
以下の長いディスカッションの歴史を人々@Html.Raw()
クリスS

動的型付きビューで匿名型を使用してこれを実行しようとしている私のような人々を救うために、これは機能しません- 私のより具体的な質問に対するこの回答を参照してください。ただし、状況に応じて、厳密に型指定されたビューでこのアプローチを使用することをお勧めします。
brichins、2015

回答:


653

コンテンツがmystring... という名前の文字列内にあるとします。

以下を使用できます。

@Html.Raw(mystring)

または、文字列を、HtmlStringまたはIHtmlStringモデルに実装されている他のタイプに変換するか、直接インライン化してregularを使用することもできます@

@{ var myHtmlString = new HtmlString(mystring);}
@myHtmlString

この回答をありがとう。私が学んでいた小さな仕事を終えるのを助けてくれました。:)しかし、私はMVC3の最新バージョンを使用しており、これまでのところHtml.Rawは使用していません:(

1
こんにちはセルジオ。MVC 3を使用していて、Rawメソッドを適切に使用しています。
Gui

1
答えてくれてありがとう!私はまだMVC 3を学んでおり、これは私を回避していました。
トッドリチャードソン

3
@ Lorenzo、+ 1私はrazor構文付きの最新のMVC 3をHtml.Raw使用しており、確実に使用できます。
Chris Snowden

1
ロレンソ、私は答えを更新して、数年前のMVCベータの言及を削除しました。元に戻す/変更してください。
Alexei Levenkov、2015

75

ASP.NET MVC 3では、次のようにする必要があります。

// Say you have a bit of HTML like this in your controller:
ViewBag.Stuff = "<li>Menu</li>"
//  Then you can do this in your view:
@MvcHtmlString.Create(ViewBag.Stuff)

13
渡された文字列がnullの場合、HTML.Rawが爆破するため、この方法を選択します。
37スター

1
ありがとう、これはとてもきれいです!
2015年

64

使用できます

@{ WriteLiteral("html string"); }

5
これは私にとって最高でした。Hangfireアプリ内でRazorを使用してメールを送信Html.Raw()していました... そこでは機能しません
shanabus

WriteLiteralの1
ムハンマドバジル

11

生のhtmlを使用するのが難しい場合があります。主にXSSの脆弱性が原因です。それが問題であるが、未加工のHTMLを使用したい場合は、怖い部分をエンコードできます。

@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")

結果

(<b>&lt;script&gt;console.log('insert')&lt;/script&gt;Hello</b>)

4

あなたはこのようにコントローラのviewdataに文字列を置くことができます:

 ViewData["string"] = DBstring;

そして、次のようにビューのビューデータを呼び出します:

@Html.Raw(ViewData["string"].ToString())


0

RazorEngineでテンプレート関数を使用するための完全な例(メール生成など):

@model SomeModel
@{
    Func<PropertyChangeInfo, object> PropInfo =
        @<tr class="property">
            <td>
                @item.PropertyName                
            </td>
            <td class="value">
                <small class="old">@item.OldValue</small>
                <small class="new">@item.CurrentValue</small>                
            </td>
        </tr>;
}

<body>

@{ WriteLiteral(PropInfo(new PropertyChangeInfo("p1", @Model.Id, 2)).ToString()); }

</body>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.