web-dev-qa-db-ja.com

Html.Raw MVCヘルパーはどのように機能しますか?

Html.Rawを使用して生のhtmlコンテンツを印刷します。たとえば、ViewBag.div = "<div> Hello </div>";のようなものをコントローラーからビュー側に送信すると、Html.Rawを使用しない限り生のhtmlコンテンツを印刷しません。メソッドが、jqueryを使用してエンコードされ、データベースに挿入されたコンテンツのようなエンコードされたコンテンツがあり、それを生のhtmlコンテンツとして印刷する場合、Html.Rawメソッドは機能せず、HttpUtility.HtmlDecode(EncodedContent)Html.Rawを使用する前に、なぜこのように動作するのか、そしてHtml.Rawメソッドを使用するのに適切な状況を教えてください。または別の方法で、なぜHtml.Rawがhtmlタグの代わりにhtmlエンティティをパラメーターとして受け取ったときに機能しないのですか?.

8
user3260672

エンコードされた文字はHTMLであり、その文字列のRawバージョンはエンコードされたものであるため。


Html.Rawは、htmlエンコードを行わずに指定されたものをレンダリングするため、_ViewBag.div = "<div> Hello </div>";_を使用します。

_@Html.Raw(ViewBag.div);
_

レンダリング

_<div> Hello </div>
_

ただし、_ViewBag.Something = "&gt;";_などのエンコードされた文字がある場合、その未加工バージョンは_&gt;_です。実際のhtmlに戻るには、あなたが言ったようにHtml.Raw(HttpUtility.HtmlDecode(EncodedContent));する必要があります。

Html.Rawがデコードを実行した場合、混乱を招き、それを実行しないものが必要になります。 ;-)

18
NikolaiDante

_Html.Raw_メソッドはRazorエンジンに特殊なcharsをエンコードしないよう要求します。

Razor Engineは、特殊文字をエンコードします。これは、送信した状態で表示することを考慮しているため、特殊文字をエンコードし、ブラウザーが再度デコードして元の状態(送信した状態)で表示しますかみそりエンジン)、ただし、_Html.Raw_を使用する場合つまり、Razorエンジンにコンテンツの特殊文字をエンコードしないように要求することを意味し、実際には、エンコードされたコードをデコードするように要求することを意味しませんcontentデータベースから取得するコンテンツなど、エンジンに要求するだけです特殊な文字をエンコードしないように要求しますデータベースにエンコードされたコンテンツがある場合、HttpUtility.HtmlDecodeを使用してデコードし、_Html.Raw_を使用して返されたhtmlタグをエンコードしないようにかみそりエンジンに要求する必要があります。

Eaxmpleの場合、データベースにこのコンテンツがある場合

_&lt;h1&gt;dklxf;&lt;span style="font-style: italic;"&gt;kldk;dlk&lt;span style="font-weight: bold;"&gt;dxl'f;dlxd'fdlf;ldk;dlkf&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
_

_HTML.Raw_を使用せずに印刷すると、かみそりエンジンはそのコンテンツの特殊文字をエンコードしてブラウザーにそのまま印刷しますが、_HTML.Raw_を使用すると、ブラウザーは、コンテンツを含むHTMLタグのセットとしてそれらをレンダリングしますが、フォーマットされたデータは含みません。次のようなものが得られます。

_<h1>dklxf;<span style="font-style: italic;">kldk;dlk<span style="font-weight: bold;">dxl'f;dlxd'fdlf;ldk;dlkf</span></span></h1></p>
_

ただし、Html.Raw(HttpUtility.HtmlDecode(EncodedContent))を使用すると、ブラウザに送信されるコンテンツはエンティティではなくhtmlタグであるため、次のコンテンツのようなフォーマットされたデータがページに表示されます。

dklxf;kldk; dlkdxl'f; dlxd'fdlf; ldk; dlkf

3
Mohamad