ASP.NET/JavaScript - 为什么"Return False"不能阻止Postback?

8

我感觉我已经做过这种场景很多次了,并且通常都有效,所以我显然漏掉了什么。

这是我的服务器端ASP.NET按钮:

<asp:Button ID="btnFoo" runat="server" Text="Foo" CssClass="button foo" OnClientClick="foo_Click();" />

这将在客户端呈现为:

<input type="submit" name="reallylongclientid" value="Foo" onclick="foo_Click();WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(reallylongclientidandpostbackoptions, false, false))" id="reallylongclientid" class="button foo">

毫不意外。

这里有个惊喜,就在我的JavaScript函数中:

function foo_Click() {
   return false;
}

好的,事实上这不是全部,但我简化了内容以证明一个观点。

当我点击按钮时,它调用客户端函数并返回false。

但它仍然会提交到服务器,为什么?

基本上,我想在点击按钮时执行以下操作:

  1. 进行客户端验证。
  2. 如果验证通过,则提交表单。
  3. 如果未通过,则在表单上显示一些错误消息。

当然,我可以将其更改为客户端按钮(input type="button"),并在需要时手动启动postback,但我不应该这样做。或者我应该吗?

1个回答

21

编写return语句,以便当您单击按钮时,它return false不允许提交表单。

 <asp:Button ID="btnFoo" runat="server" Text="Foo" CssClass="button foo" 
OnClientClick="return foo_Click();" />

知道这很明显(拍了拍脑袋)。谢谢。 - RPM1984
我刚刚注意到,如果我这样写 "var passedValidation = new Boolean(false); return passedValidation" 它仍然会发回数据。但是如果我只返回 false,它就不会了。到底怎么了?有任何想法吗? - RPM1984
使用Boolean构造函数和new关键字创建一个Boolean对象包装器,在JavaScript中,任何对象在布尔上下文中都被认为是真实的。例如:!!new Boolean(false) ==> true。我建议您直接使用布尔值truefalse字面量,它们代表原始值... - Christian C. Salvadó
@CMS - 是的,我明白了。这有点糟糕,不过没关系 - 我会坚持基本操作的。感谢您的澄清。 - RPM1984

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