在隐藏字段进行验证(Perform validation on hidden fields)

2019-06-23 14: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的特殊规则填补。 如果不填,我知道的东西是不是在视图中有效。

谢谢。

Answer 1:

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

1.9.0版本后,它是一个默认的行为。 您可以手动固定,通过增加

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

正如你可以看到这里

另一个变化应该与隐藏要素更容易形式设置,这些都是现在默认忽略( 选择“忽略”了“:隐藏”现在为默认值 )。 在理论上,这可能会破坏现有的设置。 在偶然的情况下,它实际上做, 你可以通过设置忽略选项为“[]”(方括号不带引号)修复它。



Answer 2:

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



Answer 3:

如果你没有使用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);
}


Answer 4:

你可以随时把@Html.HiddenFor(m => m.CompanyCityID)一个隐藏的div内,将其更改为EditorFor()

CSS

.hidden {
    display: none;
}​

视图

<div class="hidden">
        @Html.EditorFor(m => m.CompanyCityID)
</div


文章来源: Perform validation on hidden fields