Page Load se ejecuta 2 veces …

Hoy me he topado con un hecho muy curioso, y de explicación no muy clara. Por lo menos para mi.


Revisando una página web por que tenia un funcionamiento extraño, noté que el evento Page.Load se estaba ejecutando dos veces. Lo que primero revisé fue que no estuviese en true la opción AutoEventWireup. Con ésta opción en true, es común que los eventos se disparen dos veces.


Pero no era así. Estaba en false. Revisando el code behind de la página, encuentro el siguiente código, que no posee ninguna instrucción extraña o desconocida.


    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If User.Identity.IsAuthenticated Then Response.Redirect(“redireccionar.aspx”, True)
        ……….
    End Sub


Luego, al revisar el código escrito en la página misma (archivo aspx), noté que también estaba definido un page load, de la siguiente forma, definido dentro de una etiqueta script language=”VB” runat=”server”:


    Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        MyBase.Page_Load(Sender, e)
        …..
    end sub


Tampoco se ve nada extraño, salvo que la funcion Page_Load llama explícitamente a MyBase.Page_Load. Esto no es extraño si recordamos algo de OOP y herencia. Una clase especializada, llamando al constructor de una de mayor generalización. Dicho de otra forma, una clase heredada llamando al constructor de la clase de la cual heredó.


Para mi sorpresa, era éste llamado a MyBase.Page_Load(Sender, e) el que estaba ejecutando por segunda vez la funcion Page_Load definida en el code behind.


¿Por que sucede así, si se está llamando a una clase base?


La explicación me llega ahora mientras escribo ésto. Muy simple. En la directiva de página de la página en cuestión, aparece el siguiente código.


Page CodeBehind=”inicio.aspx.vb” Language=”vb” AutoEventWireup=”false” Inherits=”Web.Paginas.inicio”


La pagina aspx hereda de la clase code behind, y por lo tanro, el llamado es válido. Es funcionamiento es normal, pero también pasa muy desapercibido.


Patrick.
Febrero 2005.