【问题标题】:MVC bypass client-side validation ("save progress" vs "submit")MVC 绕过客户端验证(“保存进度”与“提交”)
【发布时间】:2014-01-27 06:22:14
【问题描述】:

我希望能够在不验证的情况下保存一个表单,但在提交时会进行验证。我在这个表单上有两个按钮可以保存或提交。

问题是:如果我使用“提交”按钮进行保存(然后切换控制器中的哪个操作),jquery.validate 就会启动,我无法保存部分填写的表单。

如果我将其作为链接,我不知道如何将表单发布到控制器中的新操作。

这是视图中的 HTML:

<a class="btn  btn-default" data-placement="right" data-title="Save your progress." href="/Summary/Save/2" rel="tooltip"><i class="glyphicon glyphicon-floppy-disk"></i> Save Summary</a> 
<a class="btn  btn-default" confirm="Are you sure you want to revert to the previous saved copy? You will lose all changes since your last save." data-placement="right" data-title="Revert back to your last saved copy." href="/Summary/Revert/2" rel="tooltip"><i class="glyphicon glyphicon-remove"></i> Revert Changes</a> 
<button class="btn-default  btn btn-primary" confirm="This will submit the summary to the evaluator for review. No changes will be allowed unless the evaluator returns it. Are you sure?" type="submit">Submit Summary</button>

【问题讨论】:

标签: jquery asp.net-mvc forms validation jquery-validate


【解决方案1】:

顺便说一句,根据Skipping validation on submit 上的文档,不推荐使用当前答案:

要在仍然使用提交按钮时跳过验证,请将属性 "formnovalidate" 添加到该输入:

<input type="submit" name="go" value="Submit">
<input type="submit" formnovalidate name="cancel" value="Cancel">

以前通过在输入中添加 class="cancel" 来工作,现在已弃用。

尽管从 1.17 版本开始,这两种方法仍然出现在 source code

...blob/1.17.0/src/core.js#L34

// Allow suppressing validation by adding a cancel class to the submit button
if ( $( this ).hasClass( "cancel" ) ) {
    validator.cancelSubmit = true;
}

// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button
if ( $( this ).attr( "formnovalidate" ) !== undefined ) {
    validator.cancelSubmit = true;
}

延伸阅读:jQuery Validation plugin: disable validation for specified submit buttons

【讨论】:

  • 将此更新为新接受的答案,我很高兴他们添加了这个。
  • 现在当我点击保存按钮时,它可以工作,但是即使在提交按钮上它也没有验证。
  • @HimalayaGarg,你能发布你的问题的小提琴或回购吗?
【解决方案2】:

@user2864740 建议我暂时禁用 jquery 验证,这是个好主意——在 jQuery Validation plugin: disable validation for specified submit buttons 找到了一种方法来做到这一点

为方便起见,已发布答案:

您可以在提交按钮中添加取消的 css 类来禁止验证

例如

<input class="cancel" type="submit" value="Save" />

【讨论】:

  • 顺便说一句,如果您不知道,您可以将自己的答案标记为答案。鼓励这样做,因为它 a) 将问题标记为已回答,并且 b) 将来的其他人会知道这是有效的。我建议包含一个短代码 sn-p 显示 如何 在您的答案中禁用对特定提交按钮的验证(以防您的链接将来消失):)
  • 谢谢——它说我必须等待 2 天才能接受我的回答。不过,我肯定会添加一个 sn-p。
【解决方案3】:

您可以通过在要禁用验证的按钮中添加formnovalidate 属性来实现。

<input formnovalidate="formnovalidate" type="submit" value="Save" />

【讨论】:

  • Kaleem,我认为这已经包含在我接受的答案中
猜你喜欢
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 2012-07-29
  • 2015-02-04
  • 1970-01-01
相关资源
最近更新 更多