0

当使用标准的 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”运算符)不起作用?

4

2 回答 2

0

来自 MSDN

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

它还提到了这样的 SubmitBehaviour

使用 UseSubmitBehavior 属性来指定 Button 控件是使用客户端浏览器的提交机制还是 ASP.NET 回发机制。默认情况下,此属性的值为 true,导致 Button 控件使用浏览器的提交机制。如果指定 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();");
于 2012-06-29T12:36:42.370 回答
0

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

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

OnClientClick="OnClientClickHandler();"相当于

function onclick(){
    OnClientClickHandler();
}

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

function onclick(){
    return OnClientClickHandler();
}

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

于 2012-06-29T12:45:03.507 回答