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`;

@text将被输出为Bread &amp;amp; Breakfast因为 & 是 HTML 编码的

@Html.Raw(text)将输出为“面包和早餐”

更新基于您的更新

我不能告诉你为什么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 回答