2009-08-10 16 views
25

Tra la gestione dell'evento Page_Init o l'override del metodo OnInit di una pagina, quale è meglio usare? Grazie.Page_Init vs OnInit

risposta

10

È preferibile ignorare il metodo del tipo di base poiché una chiamata virtuale è più semplice e più pulita rispetto alla creazione di un delegato che collega un evento a un gruppo di metodi.

Inoltre, l'utilizzo di AutoEventWireup impostato su true significa che si sta introducendo un sovraccarico nell'analisi del codice della pagina poiché ASP.NET dovrà creare delegati per l'utente al momento dell'esecuzione.

+2

Inoltre puoi scegliere se e quando chiamare anche il metodo base - non è possibile farlo con lo stile Page_Load –

3

Fondamentalmente non vi è alcuna differenza in questi due punti. Questo è ciò che viene fatto in OnInit in classe Pagina:

protected internal override void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    if (this._theme != null) 
    { 
     this._theme.SetStyleSheet(); 
    } 
    if (this._styleSheet != null) 
    { 
     this._styleSheet.SetStyleSheet(); 
    } 
} 

Se apriremo base.OnInit faremo sé che questo è il luogo in cui viene sparato Page_Init:

protected internal virtual void OnInit(EventArgs e) 
{ 
    if (this.HasEvents()) 
    { 
     EventHandler handler = this._occasionalFields.Events[EventInit] as EventHandler; 
     if (handler != null) 
     { 
      handler(this, e); 
     } 
    } 
} 

Quindi, in pratica non c'è differenza in questi due approcci. Tuttavia è necessario chiamare il numero base.Inserire nel metodo sovrascritto se si sceglie di utilizzare l'override anziché l'evento. Un'altra differenza è che se si sta utilizzando l'override è possibile eseguire del codice subito dopo l'applicazione del tema.

Saluti.

P.S. L'unica cosa che consiglio è di usare lo stesso approccio su tutta l'applicazione.

+0

Sì, c'è - solo quando si esegue l'override del metodo OnXXX è possibile scegliere QUANDO chiamare il metodo base (o anche se chiamarlo o meno). Questo potrebbe sembrare un po 'pignolo, ma in alcuni casi, questo può essere cruciale. Quindi, il mio consiglio: prevalga sempre! –

+0

E ho menzionato quell'abilità - "E un'altra differenza è che se stai usando l'override puoi eseguire del codice subito dopo l'applicazione del tema." –

0

OnX perché principalmente è la tecnica preferita per gestire l'evento in una classe derivata secondo MSDN.

1

OnInit è migliore perché è in fase di inizializzazione a livello di classe mentre page init può avere un effetto ridondante perché è necessario verificare se si tratta di un postback o meno.

Problemi correlati