Jquery 对隐藏字段执行验证
我的看法如下:Jquery 对隐藏字段执行验证,jquery,asp.net-mvc,asp.net-mvc-3,validation,Jquery,Asp.net Mvc,Asp.net Mvc 3,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) 在我的视图模型中,所有属性都
@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(标记为Required)是隐藏的,因此在视图中没有进行任何验证。如果在视图中显示此属性,则验证完成
我的问题:是否可以对隐藏字段执行验证?是否存在解决办法
验证隐藏字段似乎有点奇怪。原因是此字段是根据特殊规则从jQuery填充的。如果未填充,我知道视图中的某些内容无效
谢谢。可能的原因是
jquery.validate.unobtrusive.js
文件中有ignore:':hidden'
行
在1.9.0版本之后,这是一种默认行为。您可以通过添加
$.validator.setDefaults({ ignore: [] });
如你所见
另一个更改应该使表单的设置具有隐藏元素
更简单的是,现在默认情况下会忽略这些选项(“忽略”选项已取消)
“:hidden”现在作为默认设置)。从理论上讲,这可能会打破现有的平衡
设置。在不太可能的情况下,您可以通过
将忽略选项设置为“[]”(不带
报价)。
您可以始终将
@Html.HiddenFor(m=>m.CompanyCityID)
放在隐藏的div中,并将其更改为EditorFor()
CSS
.hidden {
display: none;
}
查看
<div class="hidden">
@Html.EditorFor(m => m.CompanyCityID)
</div
@EditorFor(m=>m.CompanyCityID)
您也可以在jquery.validate.js文件中注释掉这一行。
忽略:“:hidden”如果不必在控制器和相关视图的操作中使用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);
}
我真的很讨厌做那种纠正别人的人,但是忽略设置不是由jquery.validate.unobtrusive.js设置的。此外,在使用setDefaults之前,请注意它是如何工作的。如果在连接表单验证之后设置了默认值,那么进行此调用就太迟了。请参阅我的文章以获得更深入的解释@贾斯汀·迈克尔斯,也许自从我写了这个答案后,有些事情已经改变了。当时我检查了jquery.validate.unobtrusive.js,忽略设置就在那里。。。“谢谢你,查克·诺里斯!”(就像文斯·沃恩的电影《躲避球》)嘿,等等,你太年轻了,不可能成为查克·诺里斯!请记住,您不会将$.validator.setDefaults({ignore:[]})放入文件中代码>在$(文档)中。准备好,因为这将太晚。如果无法执行此操作,请使用:$('form').validate().settings.ignore=[]
这似乎不起作用。我认为它仍然可以分辨出它是隐藏的,即使它是一个隐藏的父母