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
}