如何将jQuery验证插件用于强类型枚举?
我使用的是一个强类型视图,它列出了对象的枚举,如下所示:如何将jQuery验证插件用于强类型枚举?,jquery,asp.net-mvc,razor,jquery-validate,unobtrusive-validation,Jquery,Asp.net Mvc,Razor,Jquery Validate,Unobtrusive Validation,我使用的是一个强类型视图,它列出了对象的枚举,如下所示: @model IEnumerable<Foo> <table> <tbody> @Html.EditorForModel() </tbody> </table> @model Foo <tr> <td>@Html.TextBoxFor(m => m.Bar)</td> </tr>
@model IEnumerable<Foo>
<table>
<tbody>
@Html.EditorForModel()
</tbody>
</table>
@model Foo
<tr>
<td>@Html.TextBoxFor(m => m.Bar)</td>
</tr>
现在,此对象的编辑器模板如下所示:
@model IEnumerable<Foo>
<table>
<tbody>
@Html.EditorForModel()
</tbody>
</table>
@model Foo
<tr>
<td>@Html.TextBoxFor(m => m.Bar)</td>
</tr>
@model Foo
@Html.TextBoxFor(m=>m.Bar)
除了默认的模型绑定器生成类似于[0].Bar的名称外,这一切都很正常。但是,[
和]
对于jQuery验证插件是无效字符,因此每当它尝试验证我的输入时,我总是收到以下错误:
语法错误,无法识别的表达式:label[for='[0].Bar'],label[for='[0].Bar']*,#[0].Bar
有没有办法让插件工作,同时保持我的视图绑定到模型
更新:我使用的是jQuery验证和Microsoft的非结构化验证库(是的,默认的ASP.NET MVC设置),因此我根本不直接编写任何验证代码,只要有兴趣 对于jQuery验证插件,[和]字符并非完全无效。这只是一个草率的编码,没有考虑到在name/id中有这些字符的可能性
甚至还有一个GitHub问题
我所做的是从问题中获取代码(它本身有一个小问题),并在我的JavaScript初始化代码中添加了以下攻击:
$.validator.prototype.idOrName = function(element) {
return this.groups[element.name]
|| (this.checkable(element)
? element.name
: element.id || element.name)
.replace("[", "\\[")
.replace("]", "\\]");
}
这可能不是最漂亮或最好的解决方案,但对我来说很有效。至少在jQuery中修复之前
无需使用它,因为它使用的是1.13.1(参见上面的讨论)。请注意,虽然我还没有检查自己,但是ASP.NET MVC仍然可以与1.13.0捆绑在一起请看:谢谢!)这就解释了原因,但正如我所指出的,我正在使用非结构化验证来生成验证规则,而不是自己编写任何规则。。。