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.