2010-09-09 14 views
7

Im esecuzione di un progetto ASP.NET 4.0.Page_PreInit non chiamato?

La pagina .aspx ha AutoEventWireup="true" impostata nell'intestazione.

Sebbene OnPreInit sia chiamato, Page_PreInit non è? Qualcuno può suggerire cosa c'è che non va?

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    Response.Write("bar"); 
} 

protected override void OnPreInit(EventArgs e) 
{ 
    Response.Write("foo"); 
    base.OnPreInit(e); 
} 
+0

La sintassi sembra corretta. È definito in MasterPage? – Sauleil

+2

Non è stato possibile riprodurre il problema descritto. AutoEventWireup è definito nella pagina principale? –

+0

Oppure stai ereditando la pagina? – JBrooks

risposta

1

L'evento Page_PreInit fa fuoco, si può vedere questo, se si mette un punto di interruzione alla partenza della manifestazione e passo attraverso di essa alla fase di esecuzione. Il motivo per cui la stringa "barra" non viene scritta sullo schermo è perché viene sovrascritta dallo OnPreInitEvent.

Si prega di vedere il codice qui sotto. Attraversalo e noterai come va in Page_PreInit e poi viene sovrascritto nello OnPreInitEvent. Se commentate l'INTERO evento OnPreInit vedrete "Pagina_PreInit" scritto sullo schermo.

using System; 

public partial class _Default : System.Web.UI.Page 
{ 
    string eventName = String.Empty; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.Write(eventName); 
    } 

    protected void Page_PreInit(object sender, EventArgs e) 
    { 
     eventName = "Page_PreInit"; 
    } 

    protected override void OnPreInit(EventArgs e) 
    { 
     base.OnPreInit(e); 
     eventName = "OnPreInit"; 
    } 
}