如何将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捆绑在一起

请看:谢谢!)这就解释了原因,但正如我所指出的,我正在使用非结构化验证来生成验证规则,而不是自己编写任何规则。。。