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
}