我正在使用强列表视图列出对象的枚举,如下所示:
@model IEnumerable<Foo>
<table>
<tbody>
@Html.EditorForModel()
</tbody>
</table>
假设Foo
有一个我想在客户端验证的简单数字属性:
public class Foo
{
[Required]
public int Bar { get; set; }
}
现在,此对象的编辑器模板如下所示:
@model Foo
<tr>
<td>@Html.TextBoxFor(m => m.Bar)</td>
</tr>
这很好,除了默认模型绑定器生成[0].Bar
之类的名称。但是,[
和]
是jQuery验证插件的无效字符,因此每当它尝试验证我的输入时,我总是收到以下错误:
语法错误,无法识别的表达式:label [for ='[0] .Bar'],label [for ='[0] .Bar'] *,#[0] .Bar
在保持我的视图与模型绑定的同时,有没有办法让插件工作?
更新:我正在使用jQuery Validate和Microsoft的Unobstrusive Validation库(是的,默认的ASP.NET MVC设置),所以我根本不直接编写任何验证代码,只要它是兴趣!
答案 0 :(得分:1)
[和]字符对jQuery验证插件严格无效。它只是一个草率的编码,并没有考虑到这些字符名称/ id的可能性。
甚至还有一个GitHub问题Handling ASP.NET MVC Input Arrays 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