simple page net example event code aspx asp c# asp.net events event-handling page-lifecycle

c# - net - Cablear el evento Page_PreInit manualmente, con AutoEventWireup establecido en falso



c# asp net example (2)

Si el atributo AutoEventWireup se establece en false , los eventos se deben cablear manualmente. Sin embargo, parece que no puedo hacer que Page_PreInit dispare. Supongo que podría estar haciendo que el cableado suceda demasiado tarde (una vez que ya hemos pasado Page_PreInit ), pero no estoy seguro de dónde colocar los cables.

Por ejemplo...

protected override void OnInit(EventArgs e) { base.OnInit(e) PreInit += new EventHandler(Page_PreInit); Load += new EventHandler(Page_Load); } protected void Page_PreInit(object sender, EventArgs e) { Response.Write("Page_PreInit event fired!<br>"); //this is never reached } protected void Page_Load(object sender, EventArgs e) { Response.Write("Page_Load event fired!<br>"); }

El código anterior da como resultado el "evento Page_Load despedido". se muestra, pero nada de Page_PreInit . base.OnInit(e) tanto antes como después de los cambios, y eso no tuvo ningún efecto.

El gráfico que se muestra aquí dice que el método OnInit realidad viene después del evento PreInit . Con eso en mente, traté de anular OnPreInit y hacer lo mismo --- sin efecto.

El artículo de MSDN aquí dice explícitamente que en caso de que AutoEventWireup establezca en false , los eventos se pueden cablear en OnInit modificado. El ejemplo que usan es Page_Load , y por supuesto que funciona igual que para mí, pero no abordan el hecho de que esto no parece funcionar para el evento Page_PreInit .

Mi pregunta es: ¿cómo puedo Page_PreInit evento Page_PreInit en caso de que AutoEventWireup establezca en false ?

Entiendo que hay alternativas como las que se enumeran en la página de MSDN , como usar el constructor de la página. Me gustaría saber específicamente cómo hacer lo que sugieren con OnInit .


La implementación básica del método OnPreInit () es responsable de generar el evento PreInit . Como su anulación llama a esa implementación antes de registrar su controlador PreInit , de hecho no será invocado.

Intente llamar al método de la clase base después de registrar el controlador:

protected override void OnPreInit(EventArgs e) { PreInit += new EventHandler(Page_PreInit); Load += new EventHandler(Page_Load); // And only then: base.OnPreInit(e); }


agregar todo el evento en el área de inicialización:

public WebName() { this.event+=TAB Key }