让MVC4验证jquery accordion表单的所有部分
我有一个大表单,我使用用于jQueryUI的Accordion插件将其拆分为多个部分 当我单击表单的提交按钮时,MVC的服务器端验证不会检查表单的所有输入字段-它只验证当前扩展部分的字段 在本例中,当我单击submit时,MVC只验证A部分。如果B部分或C部分尚未填写,它会抛出一个疯狂的让MVC4验证jquery accordion表单的所有部分,jquery,asp.net-mvc,jquery-ui,asp.net-mvc-4,validation,Jquery,Asp.net Mvc,Jquery Ui,Asp.net Mvc 4,Validation,我有一个大表单,我使用用于jQueryUI的Accordion插件将其拆分为多个部分 当我单击表单的提交按钮时,MVC的服务器端验证不会检查表单的所有输入字段-它只验证当前扩展部分的字段 在本例中,当我单击submit时,MVC只验证A部分。如果B部分或C部分尚未填写,它会抛出一个疯狂的NullReferenceException错误。我希望MVC4验证Accordion中的所有字段,而不是只查看一个字段 查看呈现的HTML,包含我要验证的其他字段的元素具有style=“display:non
NullReferenceException
错误。我希望MVC4验证Accordion中的所有字段,而不是只查看一个字段
查看呈现的HTML,包含我要验证的其他字段的
元素具有style=“display:none”
。我希望MVC4除了验证显示的字段外,还验证未显示的字段
编辑:
堆栈上存在溢出,建议将ignore:[]
添加到jQuery验证器设置应该可以工作。它对我不起作用,不管怎样表单都会提交
$("#GeneralForm").validate({
rules: {
GuestName: {
required: true,
},
GuestID: {
required: true,
}, // etc.
},
ignore: []
});
默认情况下,jquery validator忽略隐藏元素,但您可以禁用此行为:
<script type="text/javascript">
$.validator.setDefaults({
ignore: ""
})
</script>
$.validator.setDefaults({
忽略:“
})
解决方案最终变得简单得可笑。我有两个脚本:一个用于实例化手风琴,另一个用于进行验证:
@Scripts.Render("~/Scripts/Validation", "~/Scripts/Accordion")
命令很重要;切换这两个选项修复了问题
颠倒顺序将:
- 抛出0个控制台错误
- 让MVC以令人难以置信的惰性验证表单;即使jqueryvalidate知道一些输入无效,也不会阻止表单发布
- 如果您使用的是Entity Framework 5(特别是在
),则稍后将抛出运行时db.SaveChanges()
错误NullReferenceException
此外,
验证器
需要一个自定义的提交器
(它将根据它们包含的表单字段是否有效打开面板;只有在两个区域都通过了验证测试时才发布表单)和onsubmit:false
。默认值为true
。如果这是真的,并且您使用的是自定义submitHandler,.这看起来是真的(尽管我已经读到应该使用忽略:[
而不是忽略:“
”),但是我编辑了我的问题,以反映这在我的情况下不起作用。@alex您可以尝试编辑jquery.validate.unstructive.js文件。有一个validationInfo方法,其中包含一些选项,您可以在其中添加ignore属性。