取消按钮AutoPostBack - OnClientClick实现的细节

时间:2012-06-29 12:33:51

标签: javascript asp.net submit

使用标准的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”操作符)不工作?

2 个答案:

答案 0 :(得分:0)

来自MSDN

  

使用OnClientClick属性指定其他客户端   引发Button控件的Click事件时执行的脚本。   您为此属性指定的脚本将在   除了控件之外,按钮控件的OnClick属性   预定义的客户端脚本。

并且它也提到了SubmitBehaviour

  

使用UseSubmitBehavior属性指定是否使用Button控件   使用客户端浏览器的提交机制或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();");

答案 1 :(得分:0)

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

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

OnClientClick="OnClientClickHandler();"等同于

function onclick(){
    OnClientClickHandler();
}

OnClientClick="return OnClientClickHandler();"等同于

function onclick(){
    return OnClientClickHandler();
}

你看到了区别吗?在第一种情况下,您只是执行该函数,但什么都不返回。