对隐藏字段执行validation

我有以下观点:

@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) 

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

在此处输入图像描述

我的问题:是否可以对隐藏字段执行validation? 有解决方法吗?

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

谢谢。

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

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

 $.validator.setDefaults({ ignore: [] }); 

正如你在这里看到的那样

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

您也可以在jquery.validate.js文件中注释掉这一行。 忽略:“:隐藏”

如果您不必在控制器中使用javascript,并且在相关视图的操作中,则可以在validation模型之前添加模型错误。 例:

  [HttpPost] public ActionResult Fix(YourModel mdl) { if (mdl.CompanyCityID==0) ModelState.AddModelError("", "Your error message!"); if (ModelState.IsValid) { // //Some code // return View("YourView", yourlist); } return View(mdl); } 

您始终可以将@Html.HiddenFor(m => m.CompanyCityID)放入隐藏的div中并将其更改为EditorFor()

CSS

 .hidden { display: none; }​ 

视图