让 MVC 4 验证 jquery 手风琴表单的所有部分
Posted
技术标签:
【中文标题】让 MVC 4 验证 jquery 手风琴表单的所有部分【英文标题】:Getting MVC 4 to validate all sections of jquery accordion form 【发布时间】:2014-12-01 03:01:11 【问题描述】:我有一个很大的表格,我使用 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: []
);
【问题讨论】:
【参考方案1】:jquery 验证器默认忽略隐藏元素,但您可以禁用此行为:
<script type="text/javascript">
$.validator.setDefaults(
ignore: ""
)
</script>
【讨论】:
看起来这是真的(尽管我已经读过应该使用ignore:[]
而不是ignore:""
),但我编辑了我的问题以反映这不适用于我的情况。
@alex 你可以尝试编辑 jquery.validate.unobstrusive.js 文件。有一个带有选项的 validationInfo 方法,您可以在其中添加忽略属性。【参考方案2】:
解决方案最终变得非常简单。我有两个脚本:一个是 Accordion 实例化的地方,另一个是验证发生的地方:
@Scripts.Render("~/Scripts/Validation", "~/Scripts/Accordion")
顺序很重要;切换这两个解决了问题。
颠倒顺序会:
抛出 0 个控制台错误 让 MVC 非常懒惰地验证表单;即使 jQuery-validate 知道某些输入无效,它也不会阻止表单发布 如果您使用的是 Entity Framework 5(特别是在db.SaveChanges()
上),稍后会抛出运行时 NullReferenceException
错误。
此外,validator
需要一个自定义的submitHandler
(它将根据它们包含的表单字段是否有效打开面板;只有在两个区域都通过验证测试时才发布表单)和 onsubmit: false
。默认为true
。如果是真的,并且您正在使用自定义 submitHandler,everything silently implodes。
【讨论】:
以上是关于让 MVC 4 验证 jquery 手风琴表单的所有部分的主要内容,如果未能解决你的问题,请参考以下文章
使用 jQuery 进行 MVC 手动表单验证始终返回 True
使用 jQuery 1.10.2 在 MVC 4 中进行客户端验证
在 asp.net mvc razor 页面中验证 jquery 中的特定表单字段
MVC jquery表单验证 和 jquery_Validate表单验证