回答:
ASP.NET 4では、新しいコードナゲット構文が導入されています<%: %>。本質的に、に<%: foo %>変換され<%= HttpUtility.HtmlEncode(foo) %>ます。チームは、開発者がXSSを防ぐため<%: %>に、<%= %>可能な限り代わりに使用するように努めています。
ただし、これにより、コードナゲットがその結果をすでにエンコードしている場合、<%: %>構文によって再エンコードされるという問題が発生します。これは、IHtmlStringインターフェイス(.NET 4の新機能)の導入によって解決されました。foo()が<%: foo() %>IHtmlString を返す場合、<%: %>構文はそれを再エンコードしません。
MVC 2のヘルパーはMvcHtmlStringを返します。MvcHtmlStringはASP.NET 4でインターフェイスIHtmlStringを実装します。したがって、開発者<%: Html.*() %>がASP.NET 4で使用する場合、結果は二重にエンコードされません。
編集:
この新しい構文の直接的な利点は、ビューが少しクリーンになることです。たとえば、の<%: ViewData["anything"] %>代わりに書くことができます<%= Html.Encode(ViewData["anything"]) %>。
MvcHtmlString.Createの方法の検出されたか否かをIHtmlString利用可能であり、動的にそれがある場合はそれをサポートするために返されたクラスを作成します。windowsitpro.com/article/net-framework/Encoding-and-Strings/...
                    これは遅い回答ですが、この質問を読んでいる人がかみそりを使用している場合、覚えておくべきことは、かみそりはデフォルトですべてをエンコードすることですがMvcHtmlString、htmlヘルパーを使用することで、かみそりにエンコードする必要がないことを伝えることができます。
かみそりで文字列をエンコードしないようにするには
@Html.Raw("<span>hi</span>")
Raw()を逆コンパイルすると、文字列がHtmlStringにラップされていることがわかります。
public IHtmlString Raw(string value) {
    return new HtmlString(value); 
}
" HtmlStringはASP.NET 4にのみ存在します。
MvcHtmlStringは、.NET 3.5と.NET 4の両方をサポートするためにMVC 2に追加された互換性シムでした。MVC3は.NET 4のみであるため、おそらくソース互換性のためにMVC 2-> 3のHtmlStringのかなり自明なサブクラスです。" ソース
これは、独自のHtmlHelper拡張機能を作成する場合に便利です。たとえば、<link>タグの構文を覚えようとするのは嫌なので、タグを作成するための独自の拡張メソッドを作成しました<link>。
<Extension()> _
Public Function CssBlock(ByVal html As HtmlHelper, ByVal src As String, ByVal Optional ByVal htmlAttributes As Object = Nothing) As MvcHtmlString
    Dim tag = New TagBuilder("link")
    tag.MergeAttribute("type", "text/css")
    tag.MergeAttribute("rel", "stylesheet")
    tag.MergeAttribute("href", src)
    tag.MergeAttributes(New RouteValueDictionary(htmlAttributes))
    Dim result = tag.ToString(TagRenderMode.Normal)
    Return MvcHtmlString.Create(result)
End Function
Stringこのメソッドから戻ることもできましたが、次の場合は壊れます。
<%: Html.CssBlock(Url.Content("~/sytles/mysite.css")) %>
ではMvcHtmlString、どちらか一方<%: ... %>または<%= ... %>両方を使用すると正しく機能します。
あなたは使用することになりMvcHtmlStringますが、MVCヘルパーメソッドに生のHTMLを渡したい場合、あなたはヘルパーメソッドは、HTMLをエンコードする必要はありません。
MvcHtmlString HTMLヘルパーメソッドから?
                    
MvcHtmlString実装されないことを意味しますIHtmlString。<%:構文はダックタイプでなければなりません。インターフェイス.ToHtmlString()に.ToString()関係なく、常に前に呼び出されます。