按钮触发点击事件两次

时间:2011-04-18 10:39:41

标签: asp.net

似乎有时(但并非总是)我的按钮点击事件被触发两次。它似乎有时但不总是发生的事实真的令我感到困惑。这是我的按钮:

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

14 个答案:

答案 0 :(得分:20)

我遇到了同样的问题,我花了一段时间来弄清楚它! 如果你在按钮上添加type =“button”,它似乎可以解决问题。

答案 1 :(得分:6)

我刚遇到同样的问题,并想指出从事件中删除“处理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 :(得分:2)

请改用原生ASP.NET按钮。

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

如果您使用的是代码,请不要在ASP标记中使用OnClick,<button id="btnSave" name="btnSave" type="submit" style="font-size:11px;font-family:Verdana;font-weight:bold;" runat="server">Save</button>

答案 5 :(得分: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>
祝你好运!

答案 6 :(得分:1)

已经在不同的答案中提到了解决方案。使用 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();
      }

答案 7 :(得分: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>

希望这有帮助。

答案 8 :(得分:0)

我想我只想找到一个解决方案。删除name="btnSave"或将其更改为"btnSave1"。它会起作用。

答案 9 :(得分:0)

我有同样的问题,但原因完全不同。我将容器面板defaultbutton属性设置为按钮触发两次。删除&#34; DefaultButton &#34;来自 Asp:Panel 的属性问题已解决。

答案 10 :(得分: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

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

TabIndex="4" 

到LinkBut​​ton。

答案 11 :(得分:0)

以我为例,当我使用Chrome时会发生这种情况,但在Firefox中却没有发生

答案 12 :(得分:0)

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

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

答案 13 :(得分:-2)

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