获取MVC 4来验证jquery手风琴表单的所有部分

时间:2014-10-06 19:16:27

标签: jquery asp.net-mvc jquery-ui asp.net-mvc-4 validation

我使用了jQuery-UI的Accordion插件,将其分成几个部分。

enter image description here

当我点击表单的提交按钮时,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: []
});

2 个答案:

答案 0 :(得分:2)

jquery validator默认忽略隐藏元素,但您可以禁用此行为:

<script type="text/javascript">
    $.validator.setDefaults({
        ignore: ""
    })
</script>

答案 1 :(得分:1)

解决方案最终变得荒谬可笑。我有两个脚本:一个用于实例化Accordion,另一个用于验证:

@Scripts.Render("~/Scripts/Validation", "~/Scripts/Accordion")

订单很重要;切换这两个解决问题。

订单撤销将:

  • 抛出0个控制台错误
  • 让MVC非常懒惰地验证表格;即使jQuery-validate知道某些输入无效,也不会阻止表单发布
  • 如果您正在使用实体框架5(具体在NullReferenceException上),
  • 将在以后抛出运行时db.SaveChanges()错误。

此外,validator需要一个自定义submitHandler(根据它们包含的表单字段是否有效来打开面板;只有在两个区域都通过验证测试时才发布表单) onsubmit: false。默认值为true。如果确实如此,并且您正在使用自定义submitHandler everything silently implodes