1. ホーム
  2. c#

[解決済み】MvcHtmlStringとは何ですか、またどのような場合に使用するのですか?

2022-04-05 14:33:45

質問

その ドキュメンテーション に対して MvcHtmlString は、ひどく啓発的なものではありません。

HTMLエンコードされた文字列を表し、再度エンコードしてはいけない文字列を表します。

具体的にどのような意味があるのか、私にはよくわかりません。いくつかの HTML ヘルパーメソッドは MvcHtmlString しかし、私がネットで見たカスタムヘルパーのいくつかの例では、普通の文字列を返しています。

質問です。

とは何ですか? MvcHtmlString ?

どのような場合に MvcHtmlString オーバー string とその逆は?なぜですか?

どのように解決するのですか?

ASP.NET 4 では、新しいコードナゲット構文が導入されています。 <%: %> . 基本的には <%: foo %> は、次のように変換されます。 <%= HttpUtility.HtmlEncode(foo) %> . チームは、開発者が <%: %> の代わりに <%= %> を可能な限り使用し、XSS を防止しています。

しかし、この場合、コード・ナゲットがすでにその結果をエンコードしている場合、そのコード・ナゲットの中の <%: %> の構文は 再エンコード となります。 これは、IHtmlStringインターフェイス(.NET 4の新機能)の導入により解決されます。 もし foo() <%: foo() %> はIHtmlStringを返します。 <%: %> 構文はそれを再エンコードしません。

MVC 2のヘルパーはMvcHtmlStringを返しますが、ASP.NET 4ではIHtmlStringというインターフェースを実装しています。 そのため、開発者が <%: Html.*() %> をASP.NET 4で使用する場合、結果はダブルエンコードされません。

編集してください。

この新しい構文ですぐに得られる利点は、ビューが少しきれいになることです。 たとえば、次のように書くことができます。 <%: ViewData["anything"] %> の代わりに <%= Html.Encode(ViewData["anything"]) %> .