例如:
data-val-equalto="'MyProperty5' and 'MyProperty4' do not match."
问题:为什么&字符再次编码到&
('
),而不是按原样输出字符引用('
)?
jquery.validate插件似乎正在将'
解析为'
。
<span title="@("'MyProperty5' and 'MyProperty4' do not match.")"></span>
...正确输出:
<span title="'MyProperty5' and 'MyProperty4' do not match."></span>
<小时/> 发现问题出在ASP.NET MVC中,有一个名为
GetValidationAttributes
的方法,它将HTML编码的值添加到字典中,然后由TagBuilder
再次编码这些值。很高兴知道他们为什么要这样做。
答案 0 :(得分:3)
尝试使用Html.Raw方法输出。
否则,Razor 不假设您正在尝试输出已编码的HTML并再次对其进行编码。
鉴于
string text = `Bread & Breakfast`;
@text
将输出为Bread &amp; Breakfast
,因为&amp;是HTML编码
@Html.Raw(text)
将输出为“Bread&amp; Breakfast”
更新
我无法告诉你为什么 jQuery Validate以这种方式工作,但是有一句古老的格言“如果你做X时会受伤,就停止做X”。
您不需要在输出HTML中对单引号进行编码。以下两个都产生相同的结果:
<span title="'MyProperty5' and 'MyProperty4' do not match.">
Span With Encoded Title
</span>
<br />
<span title="'MyProperty5' and 'MyProperty4' do not match.">
Span With non-Encoded Title
</span>
答案 1 :(得分:0)
此问题已在MVC v4上修复。