17

我有以下观点:

    @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 填充的。如果未填写,我知道视图中的某些内容无效。

谢谢。

4

4 回答 4

28

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

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

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

正如你在这里看到的

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

于 2012-04-13T06:46:22.453 回答
0

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

于 2013-07-26T15:35:38.473 回答
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);
}
于 2016-03-29T05:24:04.123 回答
-1

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

CSS

.hidden {
    display: none;
}​

看法

<div class="hidden">
        @Html.EditorFor(m => m.CompanyCityID)
</div
于 2012-04-13T07:04:57.443 回答