Encontré un caso raro hoy. Hice un User Control
(.ascx) y lo metí dentro de una página .aspx, y había un evento que se disparaba dos veces.
Dentro del código ASP de un User control
tenía un formulario y al final un botón para enviarlo:
- <asp:ImageButton ID="Enviar" runat="server" BorderWidth="0px"
- ImageUrl="../Images/BotonEnviarOff.jpg" onclick="Enviar_Click" />
En el code-behind
de mi archivo .ascx
tenía lo que regularmente se esperaría:
- Protected Sub Enviar_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles Enviar.Click
- 'Codigo aqui
- End Sub
Dentro de ese evento hacía un envío de e-mail y guardaba un registro en una base de datos. Lo extraño es que cuando iba a revisar tenía dos e-mails y había dos registros en la base de datos.
Por alguna razón (un poco confusa para mí todavía) al establecer el evento que sería disparado en el evento click
, es decir, el atributo onclick
dentro del ImageButton
éste se disparaba dos veces. Supongo que uno se disparaba por default y el otro por haber explícitamente indicando el evento a ejecutarse.
La forma como lo solucioné fue eliminar ese atributo, de tal forma que mi botón quedara así:
- <asp:ImageButton ID="Enviar" runat="server" BorderWidth="0px"
- ImageUrl="../Images/BotonEnviarOff.jpg" />
Al parecer esto también tiene algo que ver con el atributo AutoEventWireup
de la directiva Page
o Control
para el control de usuario.