2009-10-13 26 views
9

Tengo un botón html, consulte a continuación. Cuando se hace clic y AutoEventWireup = "true", el controlador de clic Save_Click se dispara dos veces. Cuando AutoEventWireup = "False", se dispara una vez.El controlador HtmlButton se dispara dos veces al hacer clic (cuando AutoEventWireup = "True")

¿Por qué se dispara dos veces? El botón no está registrado dos veces y no hay ningún código que agregue el controlador de eventos. Usando la página maestra y sin Ajax.

<button id="Save" accesskey="v" type="submit" runat="server" onserverclick="Save_Click"></button> 
+0

tiene que haber algo más en el código haciendo que se dispare, creo que tendríamos que ver todo el código asociado a la página. Es muy poco probable que el botón lo haga por sí mismo. – kscott

Respuesta

10

Ok Descubrí que un HTMLButton se activa para el evento onserverclick y para el tipo = "enviar". Cuando eliminé type = "submit", se dispara una vez. ¡Este comportamiento peculiar me llevó mucho tiempo descubrirlo!

+4

En mi caso no le había dicho que use type = "submit", simplemente no había especificado un tipo. Especifiqué explícitamente type = "button" y se arregló después de eso. – Peter

+2

Esto tiene un comportamiento interesante diferente según la versión de ASP.NET que está ejecutando o el navegador que está utilizando. Ejemplo, no especifiqué 'type' y funciona bien en Fireofox, pero Chrome asumió que era un' submit' en lugar de 'button' –

0

Sólo una conjetura: el controlador no está siendo disparado dos veces, pero que haya configurado un comportamiento similar en el evento Page_Load que hace que parezca que disparar dos veces.

+0

El punto de interrupción dentro del controlador se golpea dos veces antes de que la página regrese. El controlador inserta un registro en una tabla y veo dos registros. No hay otro lugar en el código con una inserción y no hay activadores de base de datos. –

+0

Sería un segundo kscott ... ¿podemos ver más código detrás? –

19

Y ahora (al menos en .NET 4) aún mejor:

<button runat="server"> 

por defecto se comporta como lo ha hecho type = "submit" (incendios doble clic sobre), por lo que para que funcione correctamente, debe establecer explícitamente tipo "botón" =, es decir:

<button id="ButtonSubscribe2" runat="server" type="button" onserverclick="Save_Click"></button> 
+0

Resolvió mi problema. ¡Gracias! – jmotes

+0

¡resolvió mi problema! :) ¡Gracias! –

+0

buen punto, gracias –

Cuestiones relacionadas