2009-09-08 131 views
13

在MVC视图中,我有一个如下所示的表单。当用户点击提交按钮时,我想首先检查一些东西。如果没问题,请提交表格。如果不通过检查,给用户一条警告消息,然后停留在视图中。我的示例代码为:如何停止表单提交?

<script type="text/javascript"> 
    function CheckingStatus() { 
    //..... 
    if (answer == "N") { 
     alert("You choose No."); 
     return false; 
     } 
    } 
</script> 

<% Html.RenderPartial("MyForm"); %> 
.... 

<input id="btnSubmit" type="submit" value="Submit" onclick="CheckingStatus();" /> 

<% } %> 

但是,当测试时,即使答案==“N”,表单仍然提交。如何停止表单提交?

回答

27

尝试改变

<input id="btnSubmit" type="submit" value="Submit" onclick="CheckingStatus();" /> 

<input id="btnSubmit" type="submit" value="Submit" onclick="return CheckingStatus();" /> 
6

更改您的代码:

<input id="btnSubmit" type="submit" value="Submit" onclick="return CheckingStatus();" /> 

注意我说的话 “回归”。

+0

非常感谢你。 – KentZhou

0

我会使用ASP.NET按钮,或者将runat =“server”属性添加到HMTL按钮,然后使用UseSubmitBehavior =“false”属性禁用回发/表单提交。然后你可以调用form.Submit();或在您的JavaScript类似。

+0

这是MVC(请参阅标签)。没有回传。 –

7

另一种方式是可以做到的:

document.forms['MyForm'].onsubmit = CheckingStatus; 
+0

当碰巧有几种不同的表单可以提交的方式(例如自动回发下拉列表框,提交按钮等)时,这很有用。这样,你可以保证验证的发生,而不必覆盖输入元素的onclick处理程序。 –

+0

+1。表单验证/确认代码的正确位置总是form.onsubmit。并且从JavaScript分配意味着你没有愚蠢的属性值'return ...'包装器。 – bobince