2011-04-18 256 views
8

似乎有时(但并非总是)我的按钮点击事件被触发两次。事实上,它似乎有时会发生,但并非总是令人困惑。这里是我的按钮:按钮点击点击事件两次

<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

为什么你没有使用asp:button而不是按钮? – 2011-04-18 10:43:23

回答

3

改为使用本机ASP.NET按钮。

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

我使用的是JQuery主题,所以我使用HTML按钮而不是.NET版本。 – user517406 2011-04-18 10:45:24

+1

@ user517406:您仍可以使用原生的ASP.NET控件jQuery的主题,在这里看到:[应用jQuery UI的按钮样式到ASP.NET按钮(http://stackoverflow.com/questions/2672001/how-to-apply -jquery-UI-按钮到aspbutton) – Town 2011-04-18 10:47:17

+0

另一个人评论这个线程和我有同样的问题,这并不JQuery的主题化添加到我的.NET的按钮,所以我不知道。 – user517406 2011-04-18 13:08:16

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

我刚刚碰到同样的问题,并想指出的是,取出从您的活动“把手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 
+0

它适用于我,我使用VS2015。 – terenf 2018-01-29 09:00:46

13

我有同样的问题,我花了一段时间来看着办吧! 如果你添加type =“button”到你的按钮,它似乎解决了这个问题。

+0

hmm,type =“button”应该是html中按钮标签的无效属性,我想? – 2012-12-12 23:45:19

+0

你可能是对的,但似乎在这里验证。不知道... – Brandsdal 2012-12-14 01:14:29

+1

...而且,我当然是错的!类型可以是按钮,重置或提交。这非常合理。 – 2012-12-14 10:25:20

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> 

祝你好运!

-2

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

0

正确的方法(在ASP.NET Web窗体页),如已经指出的几个其他的贡献者,是对类型=“按钮”属性添加到元素和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

我想我只是想出了一个解决方案。删除name="btnSave"或将其更改为"btnSave1"。它会工作。

0

我有同样的问题,但完全不同的原因。我将容器面板的defaultbutton属性设置为按钮触发两次。除去从天冬氨酸的“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" 

到LinkBut​​ton的。