2011-04-18 29 views
8

Parece que a veces (pero no siempre) mi evento de clic de botón se activa dos veces. El hecho de que parezca suceder a veces, pero no siempre, realmente me desconcierta. Aquí está mi botón:botón disparando haga clic en evento dos veces

<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

por qué no usaste asp: botón en lugar de botón? –

Respuesta

3

Use un botón ASP.NET nativo en su lugar.

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

Estoy usando temas de JQuery, así que estoy usando el botón HTML en lugar de la versión .NET. – user517406

+1

@ user517406: Aún puede usar temas jQuery con controles ASP.NET nativos, consulte aquí: [Aplicar estilos de botones JQuery UI a botones ASP.NET] (http://stackoverflow.com/questions/2672001/how-to-apply -jquery-ui-buttons-to-aspbutton) – Town

+0

Otra persona comentó sobre este hilo y tengo el mismo problema, esto no agrega el tematizado de JQuery a mis botones .NET, por qué no lo sé. – user517406

2

Parece el problema con el cableado de controladores de eventos. http://geekswithblogs.net/TimH/archive/2006/10/23/94874.aspx

Intente si solo puede tener controlador de eventos en su back-end. Además, el problema podría ser debido al tipo = "Enviar". Comprueba si cambiarlo a solo Botón soluciona el problema.

2

Si está utilizando código detrás, no utilice OnClick en la etiqueta ASP, <button id="btnSave" name="btnSave" type="submit" style="font-size:11px;font-family:Verdana;font-weight:bold;" runat="server">Save</button>

5

me encontré con este mismo problema y quería señalar que la eliminación de la "Maneja btnSave.Click" de su evento evitar que se llame dos veces. Por ejemplo, utilizar esto en el código subyacente:

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

lugar de esto:

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

Funciona para mí, estoy usando VS2015. – terenf

13

que tenían el mismo problema, y ​​me tomó un tiempo para averiguarlo! Si agrega type = "button" a su botón, parece que solucionó el problema.

+0

hmm, type = "button" debería ser un atributo no válido para la etiqueta de botón en html, creo? –

+0

Puede que tenga razón, pero parece validar aquí. No estoy seguro ... – Brandsdal

+1

... y, estoy, por supuesto, equivocado! tipo puede ser botón, restablecer o enviar. Esto tiene perfecto sentido. –

1

Una posible razón:
Compruebe la declaración de su botón en su fuente .aspx. Si tiene un 'runat=server' y onclick="button1_click", y tiene un controlador de eventos en su código subyacente (es decir, .aspx.vb), , provocará que el evento se dispare dos veces. Este es un ejemplo en xxx.aspx:

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

Esta declaración debe ser:

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

Buena suerte!

-2

Si está utilizando asp.net, simplemente use asp: botón ..... es limpio y simple. No importa qué justificación leí en la red, no tiene sentido que el manejador del lado del servidor deba ser llamado dos veces. Cuando agrego type = "button", el problema está resuelto. Sin embargo, el formulario no se envía cuando presiono la tecla enter. Entonces ese es otro problema por resolver. Usando el botón asp: se ocupa de todo esto.

0

La forma correcta (en el ASP.NET Web Form Página), como ya se ha señalado por el par de otros contribuyentes, es añadir el "botón" type = atributo al elemento, y asociar un OnServerClick controlador de delegado de evento.

Por ejemplo:

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

Espero que esto ayude.

0

Creo que acabo de encontrar una solución. Elimine name="btnSave" o cámbielo a "btnSave1". Funcionará.

0

Tuve el mismo problema, pero una causa bastante diferente. Configuro la propiedad defaultbutton del panel del contenedor para que el botón se active dos veces. Después de eliminar la propiedad "DefaultButton" del Asp: Panel, se solucionó el problema.

0

Acabo de volver a la vieja escuela ASPX y encontré este problema.

Mi formulario se configuró de esta manera.

<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" > 

El código detrás era

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

La respuesta para mí era para quitar el atributo DefaultButton desde el panel y añadir

TabIndex="4" 

a la LinkButton.

Cuestiones relacionadas