在MVC 3中禁用客户端验证的“取消”提交按钮

61

好的,我已经试了几个小时,需要一些帮助。我正在尝试在MVC 3中实现一个具有“后退”和“下一页”按钮的页面。当点击“后退”按钮时,我希望禁用客户端MVC验证以便我的操作方法运行并将用户发送到上一个逻辑Web页面。我尝试过以下方法:

<script type="text/javascript">
  document.getElementById("backButton").disableValidation = true;
</script>

以及这个:

<input type="submit" name="backButton" value="← Back" 
 title="Go back to step 1." disableValidation="true" />

但无论如何,客户端验证JavaScript都会生效,并且不允许按钮进行后台提交。我认为disableValidation只在MVC 2中起作用,而在MVC 3中我应该做些别的事情,但似乎找不到任何例子。

4个回答

129

发布问题后,是什么神秘的力量导致答案显露出来?

在MVC 3中,通过将类名为“cancel”的值添加到按钮上,可以禁用其客户端验证。因此,在我的示例中:

<input type="submit" name="backButton" value="← Back"
 title="Go back to step 1." class="cancel" />

非常好用。也不需要ID属性。如果按钮上确实有一个样式类,请这样做:

<input type="submit" name="backButton" value="← Back"
 title="Go back to step 1." class="style-name cancel" />

3
我猜测“神秘力量”在帮助你去帮助别人。:) 我之前也遇到了类似的问题,你的解决方案出现得很快,谢谢。+1 - REMESQ
8
我听过很多次这个概念的解释,但我最喜欢“橡皮鸭”的说法。这是关于当你向他人解释问题时,你会更好地理解问题的方法。你会用比自己想得更详细的方式来解释它,这使你更好地理解问题。一个好的做法是把它想象成或者说出来,就好像你在向某个希望帮助你的人解释一样。你可能会找到答案。“橡皮鸭”来源于某个人将一个橡皮鸭放在显示器上。然后他会告诉橡皮鸭他的问题,有时候会从中找到答案。 - vbullinger
11
我原以为MVC的整个重点是关注点分离,那么这种情况下,这样做怎么就不违反了关注点分离呢?使用CSS来影响视图的功能?虽然我很喜欢它的效果,但我觉得使用它有点不妥。 - KSwift87
1
仍然会短暂地弹出客户端验证提示框... 不是理想的情况。 - BritishDeveloper
10
为了使其与MVC 5一起工作,我不得不向按钮添加“formnovalidate”属性。请参阅http://jqueryvalidation.org/reference/搜索“Skipping validation on submit”。 - Karsten
显示剩余3条评论

5

我知道这是一个非常旧的问题... 但当我搜索时,它仍然是搜索结果的首位。

对于 MVC 4(和一个按钮),似乎(至少对我来说)答案只是添加formnovalidate="formnovalidate"

 <button type="submit" class="btn btn-outline-success border-0" formnovalidate="formnovalidate" name="command" value="Back" title="Back">
    <span class="fas fa-arrow-left" aria-hidden="true"></span>
    &nbsp;Back
</button>

1

验证脚本似乎与提交类型input相关联。通过将cancel更改为按钮,可以跳过验证:

<button type="button" onclick="document.location.href('Index')">Cancel</button>

不是在MVC 4中。对于我来说,它仍然像输入一样运作。 - eaglei22

-1

我用这个来做按钮

$("button").each(function (elem) {
    var button = $($("button")[elem]);
    button.addClass('cancel');

    if (button.attr('type') == 'submit') {

        button.click(function (e) {
            var validator = button.closest('form').validate();
            validator.cancelSubmit = true;
        });
    }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接