【问题标题】:ASP.Net MVC client side validation error - working for one button but not the otherASP.Net MVC 客户端验证错误 - 适用于一个按钮但不适用于另一个
【发布时间】:2014-02-12 22:44:46
【问题描述】:

我有一个带有两个提交按钮的页面; SaveAndContinue 和 SaveAndExit。除了 CSS 类和控制器动作之外,它们完全相同。

第一个,SaveAndContinue 将正确验证客户端,如果 ModelState.IsValid 为 false,它不会发布到控制器。而第二个将完全跳过客户端验证并在 ModelState.IsValid 为 false 的情况下发布到控制器。

我正在使用标准数据注释验证,没有其他特别之处。没有花哨的 jQuery/AJAX 函数。

任何人有什么建议为什么一个可以工作而另一个不行?

我正在使用 MVC 3、jQuery.validate、jQuery.validate.unobtrusive。

提前致谢。

【问题讨论】:

  • 两个按钮都是提交类型吗?
  • 究竟是什么不起作用?你希望发生什么?
  • 是的,两个按钮都是提交的,除了 CSS 类和控制器操作之外,它们完全相同。第二个按钮不是在点击控制器之前没有在客户端验证,而第一个按钮是。我想要的是让他们都表现得一样,或者至少理解他们为什么不这样做。

标签: asp.net-mvc asp.net-mvc-3 validation modelstate


【解决方案1】:

提交按钮是否包含在不同的表单中?如果提交按钮不在包含未通过验证的输入的表单中,则提交仍然会发生,不会出现客户端错误。

【讨论】:

  • 这是一条有趣的信息 Jason,谢谢。不过我可以确认它们都在同一张表格上。
  • 我仍然可以以通常的ModelState.IsValid 方式在控制器中捕获验证,所以我有一个解决方法。我只是想了解为什么第二个按钮没有在客户端发生。例如,是否有一些按钮自动连接触发客户端上第一个按钮的验证,需要为第二个按钮显式设置?
【解决方案2】:

已经找到了答案(感谢 Osh),这让我眼前一亮。

第二个按钮使用的CSS 类之一是'cancel' 类,它本身并没有多大作用。

但是,jquery.validate-vsdoc.js 中的 validate 函数专门检查 'submitHandler' 是否是类 '.cancel' 的按钮,如果是,则设置 validator.cancelSubmit = true

this.find("input, button").filter(".cancel").click(function () {

validator.cancelSubmit = true;

});

希望这对其他人有所帮助。 :-)

【讨论】:

    猜你喜欢
    • 2016-08-07
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    相关资源
    最近更新 更多