8

MVC4かみそりビュー。文字列backgroundImageが次のように設定されているとします。

backgroundImage = string.Format("background: url('{0}') top left no-repeat;", project.MainImage);

なぜこれは

<div class="spotlight slide teaser-text" id="@slideId" style="@Html.Raw(backgroundImage)">

生産

<div class="spotlight slide teaser-text" id="spotlight-0" style="background: url(&#39;/media/215/spotlight01.jpg&#39;) top left no-repeat;">

Html.Rawnew MvcHtmlStringおよびMvcHtmlString.Createすべて同じように動作します。

私はそれが生成されることを期待します

<div class="spotlight slide teaser-text" id="spotlight-0" style="background: url('/media/215/spotlight01.jpg') top left no-repeat;">

(引用符に注意してください)。

4

1 に答える 1

3

このマークアップを含むカミソリ テンプレートのコンパイル済み DLL を見てきました。私が見る限り、問題はこれです。

Html.Raw文字列を に変換しHtmlStringます。Html エンコーディングを適用しないという点で、インスタンスを通常の文字列とは異なる方法でHttpUtility.HtmlEncode扱います。IHtmlString

プログラムで定義された文字列が属性のコンテキストで指定されると、呼び出しが行われます。

this.WriteAttribute(...)

属性を生成するのに適切なデータを使用します。このデータの一部は、 への呼び出しによって生成された HtmlStringHtml.Rawです。もう 1 つの部分は、値がリテラルではないことを示すフラグです。

非リテラル フラグ ステータスのため、WriteAttributeメソッドは最終的に を呼び出しますHtmlEncode。ただし、これはではなく、このオブジェクトの文字列値で呼び出します。したがって、出力には HTML エンコードされた値が含まれます。HtmlString

属性のコンテキスト外では、呼び出しが行われます

this.Write(...)

これは同じ問題に悩まされていません。したがって、私にはバグのように思えます (少なくとも、正確に追跡した場合)。

于 2013-07-12T10:21:57.633 に答える