我有以下看法:
@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的特殊规则填补。 如果不填,我知道的东西是不是在视图中有效。
谢谢。
可能的原因可能是有ignore: ':hidden'
在行jquery.validate.unobtrusive.js
文件。
1.9.0版本后,它是一个默认的行为。 您可以手动固定,通过增加
$.validator.setDefaults({ ignore: [] });
正如你可以看到这里
另一个变化应该与隐藏要素更容易形式设置,这些都是现在默认忽略( 选择“忽略”了“:隐藏”现在为默认值 )。 在理论上,这可能会破坏现有的设置。 在偶然的情况下,它实际上做, 你可以通过设置忽略选项为“[]”(方括号不带引号)修复它。
你也可以注释掉jquery.validate.js文件这一行。 忽略“:隐藏”
如果你没有使用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);
}
你可以随时把@Html.HiddenFor(m => m.CompanyCityID)
一个隐藏的div内,将其更改为EditorFor()
CSS
.hidden {
display: none;
}
视图
<div class="hidden">
@Html.EditorFor(m => m.CompanyCityID)
</div