似乎有时(但并非总是)我的按钮点击事件被触发两次。它似乎有时但不总是发生的事实真的令我感到困惑。这是我的按钮:
<button id="btnSave" onserverclick="btnAddUser_Click" name="btnSave" type="submit" style="font-size:11px;font-family:Verdana;font-weight:bold;" runat="server">Save</button>
答案 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"
到LinkButton。
答案 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:按钮可以解决所有这些问题。