JASoft.org

El blog de José Manuel Alarcón Aguín. Programación .NET y mucho más...

MENÚ - JASoft: JM Alarcón

Todo sobre AutoEventWireUp en páginas ASP.NET Web Forms

En la directiva de página de los Web Forms de ASP.NET existe un atributo importante denominado AutoEventWireUp. Por defecto está establecido como True. Esto quiere decir que la infraestructura de la página se encargará automáticamente de enlazar los eventos de la página con aquellos métodos definidos en ésta que tengan los nombres y las firmas apropiados.

Por ejemplo, si tenemos un método definido de esta manera:

   1: private void Page_Load(object sender, System.EventArgs e)
   2: {
   3:  
   4: }

Se llamará de manera automática al cargar la página (evento Load del ciclo de vida de la página).

Lo mismo en Visual Basic:

   1: Public Sub Page_Load(ByVal Sender As System.Object, ByVal e As System.EventArgs)
   2:  
   3: End Sub

CablesEstos métodos tiene la misma firma que un evento estándar de tipo EventHandler, es decir, no devuelven nada y toman como parámetros un objeto y un objeto de tipo EventArgs. Su nombre es Page_ seguido del nombre del evento del ciclo de vida de la página que queremos capturar: Init, PreLoad, Load, Render, etc...

Es muy cómodo y nos facilita la vida.

Pero ¿qué pasa si establecemos AutoEventWireUp a False?

Esto desactiva la conexión automática entre los eventos y los métodos Page_, por lo tanto nos dejarán de funcionar todos ellos y no responderán la carga de la página, el gestor de errores, etc...

Para que vuelvan a funcionar tendremos que hacer más trabajo manual.

En el caso de Visual Basic es muy fácil por que lo único que tendremos que hacer es sacar partido a la claúsula Handles e indicar con ella a qué evento responde cada método de los que tenemos definidos. Así que, en el ejemplo del evento de carga de la página, con añadir Handles Me.Load al final de su definición ya estará listo:

   1: Public Sub Page_Load(ByVal Sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load
   2:  
   3: End Sub

Y lo mismo con los demás métodos. Muy fácil. Además el propio Visual Studio nos ayudará mucho con ello ya que nos ofrece una lista desplegable con los nombres de los eventos de la página y define cada uno de ellos por nosotros de manera automática.

En el caso de C# la cosa es un poco más complicada ya que tendremos que sobrescribir el métodos OnInit de la página, que se llama al inicializar la página por parte de la infraestructura de ASP.NET, y en éste debemos asignar manualmente un manejador para cada evento que nos interese.

Así,  para nuestro ejemplo para la carga de la página, lo asignaríamos a la función anterior sobrescribiendo el método OnInit, así:

   1: override protected void OnInit(EventArgs e)
   2: {
   3:     this.Load += new System.EventHandler(this.Page_Load);
   4: }

Lo  mismo haríamos con otros posibles eventos a controlar en el ciclo de vida de la página.

Es sencillo pero más tedioso.

¿Por que querríamos desactivar AutoEventWireUp?

Bueno, en condiciones normales no nos interesa hacer esto ya que como hemos visto nos facilita la vida un poco. Sin embargo usar esta característica tiene como contrapartida que perdemos un poco de rendimiento, ya que la infraestructura de página debe usar reflexión y además llamar al método CreateDelegate para asignar dinámicamente el evento. Esto no es demasiado importante en términos de rendimiento en cualquier sitio normal, pero si nuestra aplicación va a estar sometida a cargas muy grandes de usuarios, y nos interesa sacarle el máximo rendimiento para hacerla muy escalable, cualquier pequeña optimización ayuda.

Por lo tanto en esos casos puede que nos interesa desactivar el enlazado automático de eventos de página.

Podemos hacerlo en la propia página usando la directiva de página @page:

   1: <% @Page AutoEventWireup="false" %>

Si queremos deshabilitarlo para toda la aplicación o para una carpeta completa en concreto podemos utilizar también el archivo de configuración web.config, en concreto la sección pages del mismo:

   1: <configuration>
   2:    <system.web>
   3:       <pages autoEventWireup="false" />
   4:    </system.web>
   5: </configuration>

Con esto quedará deshabilitado para todas las páginas influidas por el web.config en cuestión (toda la aplicación si está en el raíz o una carpeta y sus subcarpetas si está dentro de algún directorio).

Un detalle importante: AutoEventWireUp funciona no sólo para las páginas ASPX sino también con los controle de usuario (ASCX) que tengamos, así que tenlo en cuenta también en éstos.

¡Espero que te resulte útil!

¿Te ha gustado este post? - Aprende .NET con los cursos on-line tutelados de campusMVP:
   ·
Preparación del examen 70-515: Desarrollo Web con .NET 4.0 (Tutelado por mi)
   · Desarrollo Web con ASP.NET 4.0 Web Forms (Tutelado por mi)
   · ASP.NET 4.0 Web Forms desde cero (Tutelado por mi)
   · Desarrollo Web con ASP.NET MVC 3 
   · Silverlight 4.0 - Aplicaciones Ricas para Internet (RIA)
   · jQuery paso a paso para programadores ASP.NET
   · Visual Studio 2010 desde cero

Banner

Agregar comentario

  Country flag

biuquote
  • Comentario
  • Vista previa
Loading