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エンティティをパラメーターとして受け取ったときに機能しないのですか?.
エンコードされた文字はHTMLであり、その文字列のRawバージョンはエンコードされたものであるため。
Html.Rawは、htmlエンコードを行わずに指定されたものをレンダリングするため、_ViewBag.div = "<div> Hello </div>";
_を使用します。
_@Html.Raw(ViewBag.div);
_
レンダリング
_<div> Hello </div>
_
ただし、_ViewBag.Something = ">";
_などのエンコードされた文字がある場合、その未加工バージョンは_>
_です。実際のhtmlに戻るには、あなたが言ったようにHtml.Raw(HttpUtility.HtmlDecode(EncodedContent));
する必要があります。
Html.Rawがデコードを実行した場合、混乱を招き、それを実行しないものが必要になります。 ;-)
_Html.Raw
_メソッドはRazorエンジンに特殊なcharsをエンコードしないよう要求します。
Razor Engineは、特殊文字をエンコードします。これは、送信した状態で表示することを考慮しているため、特殊文字をエンコードし、ブラウザーが再度デコードして元の状態(送信した状態)で表示しますかみそりエンジン)、ただし、_Html.Raw
_を使用する場合つまり、Razorエンジンにコンテンツの特殊文字をエンコードしないように要求することを意味し、実際には、エンコードされたコードをデコードするように要求することを意味しませんcontentデータベースから取得するコンテンツなど、エンジンに要求するだけです特殊な文字をエンコードしないように要求しますデータベースにエンコードされたコンテンツがある場合、HttpUtility.HtmlDecodeを使用してデコードし、_Html.Raw
_を使用して返されたhtmlタグをエンコードしないようにかみそりエンジンに要求する必要があります。
Eaxmpleの場合、データベースにこのコンテンツがある場合
_<h1>dklxf;<span style="font-style: italic;">kldk;dlk<span style="font-weight: bold;">dxl'f;dlxd'fdlf;ldk;dlkf</span></span></h1>
_
_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タグであるため、次のコンテンツのようなフォーマットされたデータがページに表示されます。