如何使用强类型枚举的jQueryvalidation插件?
我使用强类型视图列出对象的枚举,如下所示:
@model IEnumerable @Html.EditorForModel()
假设Foo
有一个简单的数字属性,我想在客户端validation:
public class Foo { [Required] public int Bar { get; set; } }
现在,此对象的编辑器模板如下所示:
@model Foo @Html.TextBoxFor(m => m.Bar)
除了默认模型绑定器生成类似[0].Bar
名称之外,这种方法[0].Bar
。 但是, [
和]
是jQuery validate插件的无效字符,因此每当它尝试validation我的输入时,我总是收到以下错误:
语法错误,无法识别的表达式:label [for ='[0] .Bar’],label [for ='[0] .Bar’] *,#[0] .Bar
有没有办法让插件工作,同时保持我的视图绑定到模型?
更新 :我正在使用jQuery Validate和Microsoft的Unobstrusive Validation库(是的,默认的ASP.NET MVC设置),所以我根本没有直接编写任何validation代码,只是感兴趣!
对于jQuery validate插件,[和]字符并不严格无效。 这只是一个草率的编码,没有考虑在名称/ ID中拥有这些字符的可能性。
甚至有一个GitHub问题处理ASP.NET MVC输入数组exception 。
我做的是我从问题中获取代码(它本身有一个小问题)并在我的JavaScript初始化代码中添加了这个hack:
$.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捆绑在一起