我有以下观点:
@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(标记为必需)被隐藏,因此在视图中没有进行验证。如果我在视图中显示此属性,则验证已完成。
我的问题:是否可以对隐藏字段执行验证?有解决方法吗?
验证隐藏字段似乎有点奇怪。原因是该字段是基于特殊规则从jQuery填充的。如果没有填写,我知道视图中的某些内容无效。
感谢。
答案 0 :(得分:28)
可能的原因可能是ignore: ':hidden'
文件中有jquery.validate.unobtrusive.js
行。
1.9.0版本之后,它是默认行为。您可以通过添加
手动修复此问题$.validator.setDefaults({ ignore: [] });
正如您所见here
另一个更改应该是使用隐藏元素设置表单 更容易,默认情况下会忽略这些(选项“忽略”具有 “:hidden”现在默认为)。从理论上讲,这可能打破现有的局面 建立。在实际情况不太可能的情况下,你可以解决它 将ignore-option设置为“[]”(方括号不带 引号)。强>
答案 1 :(得分:0)
您也可以在jquery.validate.js文件中注释掉这一行。 忽略:“:隐藏”
答案 2 :(得分:0)
如果您不必在控制器中使用javascript,并且在相关视图的操作中,则可以在验证模型之前添加模型错误。例如:
[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);
}
答案 3 :(得分:-1)
您始终可以将@Html.HiddenFor(m => m.CompanyCityID)
放入隐藏的div中,然后将其更改为EditorFor()
。
<强> CSS 强>
.hidden {
display: none;
}
查看强>
<div class="hidden">
@Html.EditorFor(m => m.CompanyCityID)
</div