0

例えば:

data-val-equalto="'MyProperty5' and 'MyProperty4' do not match."

質問:文字参照を ( ) のまま出力するのではなく、 & 文字を&( ) に再度エンコードするのはなぜですか?''

jquery.validate プラグインは として解析'しているよう'です。


問題は Razor にあるようには見えませんが、目立たない検証属性を生成するコードでは、次のコードが使用されます。

<span title="@("'MyProperty5' and 'MyProperty4' do not match.")"></span>

...正しく出力されます:

<span title="&#39;MyProperty5&#39; and &#39;MyProperty4&#39; do not match."></span>


問題が ASP.NET MVC にあることがわかりました GetValidationAttributes。HTML でエンコードされた値を辞書に追加するメソッドが呼び出され、値が によって再度エンコードされTagBuilderます。彼らがなぜこれを行っているのかを知ることは良いことです。

4

2 に答える 2

3

Html.Rawメソッドを使用して出力してみてください。

それ以外の場合、Razor は、エンコードされた HTML を出力しようとしていると見なさず、再度エンコードします。

与えられた

string text = `Bread &amp; Breakfast`;

@textBread &amp;amp; Breakfast& は HTML エンコードされているため、次のように出力されます。

@Html.Raw(text)「Bread & Breakfast」として出力されます

更新に基づく更新

jQuery Validate がそのように機能する理由を説明することはできませんが、「X を実行するときに問題が発生する場合は、X を停止する」という古い格言があります。

出力 HTML で一重引用符をエンコードする必要はありません。次のどちらも同じ結果になります。

<span title="&#39;MyProperty5&#39; and &#39;MyProperty4&#39; do not match.">
Span With Encoded Title
</span>
<br />
<span title="'MyProperty5' and 'MyProperty4' do not match.">
Span With non-Encoded Title
</span>
于 2012-08-03T17:12:55.900 に答える
0

この問題は MVC v4 で修正されました。

于 2013-08-23T00:42:29.843 に答える