我使用了jQuery-UI的Accordion插件,将其分成几个部分。
当我点击表单的提交按钮时,MVC的服务器端验证不会检查所有表单的输入字段 - 仅验证字段当前扩展部分。
在此示例中,当我单击提交时,MVC仅验证A部分。如果B部分或C部分尚未填写,则会引发一个疯狂的NullReferenceException
错误。我希望MVC 4能够验证Accordion中的所有字段,而不是只看一个。
查看呈现的HTML,包含我要验证的其他字段的<div class="ui-accordion-content">
元素具有style="display:none"
。除了显示的字段外,我希望MVC 4验证未显示的字段。
编辑:
Stack Overflow上有many answers建议将ignore: []
添加到jQuery验证器设置应该有效。它对我不起作用,表格无论如何都会提交。
$("#GeneralForm").validate({
rules: {
GuestName: {
required: true,
},
GuestID: {
required: true,
}, // etc.
},
ignore: []
});
答案 0 :(得分:2)
jquery validator默认忽略隐藏元素,但您可以禁用此行为:
<script type="text/javascript">
$.validator.setDefaults({
ignore: ""
})
</script>
答案 1 :(得分:1)
解决方案最终变得荒谬可笑。我有两个脚本:一个用于实例化Accordion,另一个用于验证:
@Scripts.Render("~/Scripts/Validation", "~/Scripts/Accordion")
订单很重要;切换这两个解决问题。
订单撤销将:
NullReferenceException
上),db.SaveChanges()
错误。此外,validator
需要一个自定义submitHandler
(根据它们包含的表单字段是否有效来打开面板;只有在两个区域都通过验证测试时才发布表单) 和 onsubmit: false
。默认值为true
。如果确实如此,并且您正在使用自定义submitHandler everything silently implodes。