对隐藏字段执行验证

Bro*_*ato 17 validation asp.net-mvc jquery asp.net-mvc-3

我有以下观点:

    @Html.LabelFor(m => m.CompanyPostCode)
    @Html.TextBoxFor(m => m.CompanyPostCode)

    @Html.LabelFor(m => m.CompanyCity)
    @Html.TextBoxFor(m => m.CompanyCity)

    @Html.HiddenFor(m => m.CompanyCityID)
Run Code Online (Sandbox Code Playgroud)

在我的视图模型中,所有属性都标记为[必需].然后问题是我的CompanyCityID(标记为必需)被隐藏,因此在视图中没有进行验证.如果我在视图中显示此属性,则验证已完成.

在此输入图像描述

我的问题:是否可以在隐藏字段上执行验证?有解决方法吗?

验证隐藏字段似乎有点奇怪.原因是该字段是基于特殊规则从jQuery填充的.如果它没有填充,我知道视图上的某些内容无效.

谢谢.

Chu*_*ris 28

可能的原因可能是文件中存在ignore: ':hidden'jquery.validate.unobtrusive.js.

在1.9.0版本之后,它是默认行为.您可以通过添加手动修复它

$.validator.setDefaults({ ignore: [] });
Run Code Online (Sandbox Code Playgroud)

正如你在这里看到的那样

另一个更改应该使隐藏元素的表单设置更容易,默认情况下现在忽略这些更改(选项"ignore"现在默认为":hidden").从理论上讲,这可能会打破现有的设置.在实际情况不太可能的情况下,您可以通过将ignore-option设置为"[]"(没有引号的方括号)来修复它.

  • 请记住,你不要把`$ .validator.setDefaults({ignore:[]});`放在`$(document).ready`中,因为这太迟了.如果你不能这样做,请使用:`$('form').validate().settings.ignore = []` (3认同)
  • 很好的答案,我正在寻找这个3个小时......"谢谢你,查克诺里斯!" (就像电影Dodgeball和Vince Vaughn一样) (2认同)