对隐藏字段执行验证

时间:2012-04-13 06:41:52

标签: 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)

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

enter image description here

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

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

感谢。

4 个答案:

答案 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