似乎有时(但并非总是)我的按钮单击事件被触发两次。 事实上,这种情况似乎有时会发生,但并非总是如此,这让我很困惑。 这是我的按钮:
<button id="btnSave" onserverclick="btnAddUser_Click" name="btnSave" type="submit" style="font-size:11px;font-family:Verdana;font-weight:bold;" runat="server">Save</button>
我也遇到了同样的问题,我花了一段时间才弄清楚! 如果您将 type="button" 添加到按钮,似乎可以解决问题。
我刚刚遇到了同样的问题,并想指出,从事件中删除“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
改用本机 ASP.NET 按钮。
<asp:Button id="btnSave" runat="server" OnClick="btnAddUser_Click"
style="font-size:11px;font-family:Verdana;font-weight:bold;" Text="Save" />
看起来像是事件处理程序连接的问题。 http://geekswithblogs.net/TimH/archive/2006/10/23/94874.aspx
尝试是否可以在后端仅使用事件处理程序。此外,问题可能是由于 type =“Submit”造成的。检查将其更改为仅按钮是否可以解决问题。
如果您使用代码隐藏,请勿在 ASP 标记中使用 OnClick,
<button id="btnSave" name="btnSave" type="submit" style="font-size:11px;font-family:Verdana;font-weight:bold;" runat="server">Save</button>
解决方案已经在不同的答案中提到了。使用 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();
}
一个可能的原因:
检查 .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>
祝你好运!
我想我刚刚找到了解决方案。删除
name="btnSave"
或将其更改为 "btnSave1"
。会起作用的。
正确的方法(在 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>
希望这有帮助。
我有同样的问题,但原因完全不同。我将容器面板 defaultbutton 属性设置为按钮触发两次。从 Asp:Panel 中删除“DefaultButton”属性后,问题就解决了。
再次深入研究旧式 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。
就我而言,当我使用 Chrome 时会发生这种情况,但在 Firefox 中不会发生
这是因为按钮类型是提交。您需要将其更改为按钮来解决按钮事件触发两次的问题。请参阅此博客以获取更多说明。
https://mzulkamal.com/blog/asp-net-web-form-html-button-tag-fires-two-times-s
对我来说,问题是该函数调用了两次,一次是从 aspx 页面调用的,如下所示:
还有一个在代码后面,比如 this.btnSave.Click += new EventHandler(this.btnSave_Click);
从一侧移除即可解决问题
如果您使用的是asp.net,只需使用asp:button......它干净简单。无论我在网上读到什么理由,服务器端处理程序应该被调用两次是没有意义的。 当我添加 type="button" 时,问题就解决了。但是,当我按回车键时,表单没有提交。所以这是另一个需要解决的问题。使用 asp:button 可以解决这一切。