取消按钮自动回发 - 客户端单击实现的细节

Canceling Button AutoPostBack - Specifics of OnClientClick implementation

本文关键字:单击 客户端 实现 细节 按钮 取消      更新时间:2023-09-26

使用标准 asp:Button 组件时,必须使用以下技术取消自动回发(或有条件地进行回发):

  • 通过 Button.OnClientClick 属性指定客户端操作;

  • 实现一个逻辑,该逻辑返回一个布尔值,该值指示是否应执行回发。

以下内容不会取消回发(尽管"OnClientClickHandler"方法返回"false"):

<asp:Button ID="btn" runat="server" OnClientClick="OnClientClickHandler();" />
function OnClientClickHandler() {
    return false;
}

以下实现执行:

<asp:Button ID="btn" runat="server" OnClientClick="return OnClientClickHandler();" />

看起来这种行为是由 JavaScript 代码范围的细节引起的。无论如何,我对这个场景的低级实现细节感兴趣。

为什么第一个实现(在"OnClientClickHandler"方法调用之前没有"返回"运算符)不起作用?

需要添加return的原因是,从事件处理程序返回 false 是取消默认行为的方法(在这种情况下,提交表单)。

另一种方法是执行event.prefentDefault()

OnClientClick="OnClientClickHandler();"相当于

function onclick(){
    OnClientClickHandler();
}

OnClientClick="return OnClientClickHandler();"相当于

function onclick(){
    return OnClientClickHandler();
}

你看出区别了吗?在第一种情况下,您只是执行函数,但不返回任何内容。

来自 MSDN

使用 OnClientClick 属性指定其他客户端 引发按钮控件的 Click 事件时执行的脚本。 为此属性指定的脚本呈现在 按钮控件的 OnClick 属性以及控件的 预定义的客户端脚本。

并且还提到了这样的提交行为

使用 UseSubmitBehavior 属性指定按钮控件是否 使用客户端浏览器的提交机制或 ASP.NET 回发 机制。默认情况下,此属性的值为 true,导致 用于使用浏览器提交机制的按钮控件。如果指定 False,ASP.NET 页面框架将客户端脚本添加到页面 将表单发布到服务器。

<asp:Button ID="btn" runat="server" OnClientClick="return OnClientClickHandler();" UseSubmitBehavior="false" />

像这样尝试

function CancelPostBack()
{
  return false;
}

C# 代码。在 PageLoad 事件中。

btn.Attributes.Add("onclick","return CancelPostBack();");