Wednesday, October 18, 2006

Eventos no se disparan en un WebUserControl en Visual Studio 2005

Cuando se crea un WebUserControl en Visual Studio 2005, y deseamos que ese control dispare eventos, se puede dar la siguiente situación: la primera vez que se ejecuta el aplicación se dispara el evento, sin embargo la siguientes ocasiones el evento no es disparado.

Esto se debe al comportamiento que tiene Visual Studio 2005 con la propiedad autoeventwireup, en VB el default es False en C# el defautl es true. Cuando AutoEventWireUp está en true, el framework creará las event handler de los controles y de las páginas automáticamente, sino buscará las definiciones en nuestro código. Para solucionar el problema mencionado anteriormente será necesario poner AutoEventWireUp en False y hacer la asignación de los event handlers del WebUserControl por medio del código.

bool ignoreCase = true;
bool throwOnFailure = false;
Delegate d = null;

d = Delegate.CreateDelegate(
typeof(EventHandler), this,
"Page_Load", ignoreCase,
throwOnFailure
);

Para más información pueden consultar:


http://odetocode.com/Blogs/scott/archive/2006/02/16/2914.aspx
http://support.microsoft.com/kb/324151
http://msdn2.microsoft.com/en-us/library/system.web.configuration.pagessection.autoeventwireup.aspx

2 comments:

@r@u said...

Hola! Disculpa podrias detallar la sintaxis que colocaste en este tema, entiendo que dispara el evento page_load pero si quiere disparar cualquier otro evento o incluso una funcion ?

Saludos Gracias...

Eduardo Castro said...

Lo que tienes que hacer es definir el nuevo evento que despues lo ligas con el mismo código que he publicado, solo tienes que cambiar el nombre del evento que quieres disparar, para el caso de las funciones lo puedes hacer con delegates

PASS Marathon Spanish Edition Azure SQL Datawarehouse

Este 21 de febrero estaré participando como conferencista en el PASS Marathon Spanish Edition, el registro al evento está en el siguiente en...