Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 对隐藏字段执行验证_Jquery_Asp.net Mvc_Asp.net Mvc 3_Validation - Fatal编程技术网

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=[]
这似乎不起作用。我认为它仍然可以分辨出它是隐藏的,即使它是一个隐藏的父母