按钮触发点击事件两次

问题描述 投票:0回答:15

似乎有时(但并非总是)我的按钮单击事件被触发两次。 事实上,这种情况似乎有时会发生,但并非总是如此,这让我很困惑。 这是我的按钮:

<button id="btnSave" onserverclick="btnAddUser_Click" name="btnSave" type="submit" style="font-size:11px;font-family:Verdana;font-weight:bold;" runat="server">Save</button>
asp.net
15个回答
28
投票

我也遇到了同样的问题,我花了一段时间才弄清楚! 如果您将 type="button" 添加到按钮,似乎可以解决问题。


9
投票

我刚刚遇到了同样的问题,并想指出,从事件中删除“Handles btnSave.Click”将防止它被调用两次。例如,在后面的代码中使用它:

Protected Sub btnSave_OnClick(ByVal sender As Object, ByVal e As System.EventArgs)
    'Do Something
End Sub

而不是这个:

Protected Sub _btnSave_OnClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSave.Click
    'Do Something
End Sub

2
投票

改用本机 ASP.NET 按钮。

<asp:Button id="btnSave" runat="server" OnClick="btnAddUser_Click"  
     style="font-size:11px;font-family:Verdana;font-weight:bold;" Text="Save" />

2
投票

看起来像是事件处理程序连接的问题。 http://geekswithblogs.net/TimH/archive/2006/10/23/94874.aspx

尝试是否可以在后端仅使用事件处理程序。此外,问题可能是由于 type =“Submit”造成的。检查将其更改为仅按钮是否可以解决问题。


2
投票

如果您使用代码隐藏,请勿在 ASP 标记中使用 OnClick,

<button id="btnSave" name="btnSave" type="submit" style="font-size:11px;font-family:Verdana;font-weight:bold;" runat="server">Save</button>


2
投票

解决方案已经在不同的答案中提到了。使用 type ="button" 而不是提交

这是示例代码

    <span class="input-group-btn">
      <button id="btnLoadCustomerFile" class="btn btn-default" type="button" runat="server" onserverclick="btnLoadCustomerFile_Click" >Load</button>
       </span>

以及处理点击的后端代码

 protected void btnLoadCustomerFile_Click(object sender,EventArgs e)
    {
        LoadCustomerFile();
      }

1
投票

一个可能的原因:
检查 .aspx 源中的按钮声明。 如果您有

'runat=server'
onclick="button1_click"
,并且您的代码隐藏中有一个事件处理程序(即 .aspx.vb), 它将导致事件被触发两次。 这是 xxx.aspx 中的示例:

<asp:Button id="button1" onclick="button1_Click" runat="server" Text="Click Me!"></asp:Button>

此声明应为:

<asp:Button id="button1" runat="server" Text="Click Me!"></asp:Button>

祝你好运!


0
投票

我想我刚刚找到了解决方案。删除

name="btnSave"
或将其更改为
"btnSave1"
。会起作用的。


0
投票

正确的方法(在 ASP.NET Web 表单页面中),正如其他几个贡献者已经指出的那样,是将 type="button" 属性添加到元素,并关联一个 onserverclick 事件委托处理程序.

例如:

<button type="button" id="btnSave" runat="server" onserverclick="btnSave_ServerClick" class="btn btn-success btn-label">
    <i class="fa fa-save"></i>Save
</button>

希望这有帮助。


0
投票

我有同样的问题,但原因完全不同。我将容器面板 defaultbutton 属性设置为按钮触发两次。从 Asp:Panel 中删除“DefaultButton”属性后,问题就解决了。


0
投票

再次深入研究旧式 ASPX 并发现了这个问题。

我的表格是这样设置的。

<asp:UpdatePanel ID="login" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:Panel ID="forgotPassword" runat="server" DefaultButton="lbtnSendLoginDetails" Visible="False">
            <asp:LinkButton ID="lbtnSendLoginDetails" runat="server" >

背后的代码是

Protected Sub lbtnSendLoginDetails_Click(sender As Object, e As EventArgs) Handles lbtnSendLoginDetails.Click

我的答案是从面板中删除 DefaultButton 属性并添加

TabIndex="4" 

到 LinkButton。


0
投票

就我而言,当我使用 Chrome 时会发生这种情况,但在 Firefox 中不会发生


0
投票

这是因为按钮类型是提交。您需要将其更改为按钮来解决按钮事件触发两次的问题。请参阅此博客以获取更多说明。

https://mzulkamal.com/blog/asp-net-web-form-html-button-tag-fires-two-times-s


0
投票

对我来说,问题是该函数调用了两次,一次是从 aspx 页面调用的,如下所示:

还有一个在代码后面,比如 this.btnSave.Click += new EventHandler(this.btnSave_Click);

从一侧移除即可解决问题


-1
投票

如果您使用的是asp.net,只需使用asp:button......它干净简单。无论我在网上读到什么理由,服务器端处理程序应该被调用两次是没有意义的。 当我添加 type="button" 时,问题就解决了。但是,当我按回车键时,表单没有提交。所以这是另一个需要解决的问题。使用 asp:button 可以解决这一切。

© www.soinside.com 2019 - 2024. All rights reserved.