对隐藏字段执行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(标记为必需)被隐藏,因此在视图中没有进行validation。 如果我在视图中显示此属性,则validation已完成。
我的问题:是否可以对隐藏字段执行validation? 有解决方法吗?
validation隐藏字段似乎有点奇怪。 原因是该字段是基于特殊规则从jQuery填充的。 如果没有填写,我知道视图上的某些内容无效。
谢谢。
可能的原因可能是ignore: ':hidden'
jquery.validate.unobtrusive.js
文件中的ignore: ':hidden'
行。
在1.9.0版本之后,它是默认行为。 您可以通过添加手动修复它
$.validator.setDefaults({ ignore: [] });
正如你在这里看到的那样
另一个更改应该使隐藏元素的表单设置更容易,默认情况下现在忽略这些更改( 选项“忽略”现在默认为“:hidden” )。 从理论上讲,这可能会打破现有的设置。 在实际情况不太可能的情况下, 您可以通过将ignore-option设置为“[]”(没有引号的方括号)来修复它。
您也可以在jquery.validate.js文件中注释掉这一行。 忽略:“:隐藏”
如果您不必在控制器中使用javascript,并且在相关视图的操作中,则可以在validation模型之前添加模型错误。 例:
[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; }
视图
@Html.EditorFor(m => m.CompanyCityID)
- 如何使用jQuery将JSON数据绑定到Asp.net MVC中的dropdownlist
- 我如何在mvc 4中使用带有JSONpost的AntiForgeryToken
- 哪个Javascript历史回复实现最好?
- 如何在asp.net mvc中刷新页面后保留注入的局部视图
- JQuery / CSS:Div-overlay并不影响其他div的位置
- 在一个页面中以两种不同的forms使用多个@ Html.AntiForgeryToken()是否可能/正确?
- Kendo UI MVC – 基本的ajax绑定
- jQuery / ASP MVC – “$ .ajax”调用中的parsererror
- 使用Jquery ajax在Controller中调用ActionResult方法并返回数据