2009-08-10 3 views
25

Zwischen dem Behandeln des Page_Init-Ereignisses oder dem Überschreiben der OnInit-Methode einer Seite, welches ist besser zu verwenden? Vielen Dank.Page_Init vs OnInit

Antwort

10

Das Überschreiben der Methode des Basistyps ist vorzuziehen, da ein virtueller Aufruf einfacher und sauberer ist als das Erstellen eines Delegaten, der ein Ereignis an eine Methodengruppe anfügt.

Auch auf AutoEventWireup unter Berufung auf true gesetzt wird, bedeutet, dass Sie über Kopf in die Parsen Ihrer Seite Code einführen als ASP.NET wird all Delegierten für Sie zur Ausführungszeit anlegen.

+2

Außerdem können Sie auswählen, ob und wann die Basismethode aufgerufen werden soll - das geht nicht mit dem Page_Load-Stil –

3

Grundsätzlich gibt es keinen Unterschied in dieser zwei Ansätze. Das ist, was in OnInit in Page-Klasse getan:

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

Wenn wir base.OnInit öffnen wir werden se, dass das ist der Ort, an dem Page_Init abgefeuert wird:

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

es also im Grunde nicht Unterschied in diesen beiden Ansätzen. Sie müssen jedoch base.OnInit in Ihrer überschriebenen Methode aufrufen, wenn Sie sich dafür entscheiden, override statt event zu verwenden. Und ein weiterer Unterschied ist, dass wenn Sie Override verwenden, können Sie einige Code ausführen, nur nachdem Theme angewendet wurde.

Grüße.

P.S. Das einzige, was ich empfehle, ist die gleiche Vorgehensweise in der gesamten Anwendung.

+0

Ja, es gibt - nur beim Überschreiben der OnXXX-Methode haben Sie die Wahl von WHEN, um die Basismethode aufzurufen (oder auch, ob sie überhaupt aufgerufen wird oder nicht). Dies scheint ein bisschen pingelig, aber in bestimmten Fällen kann dies entscheidend sein. Deshalb mein Rat: Überschreibe immer! –

+0

Und ich habe diese Fähigkeit erwähnt - "Und ein weiterer Unterschied ist, dass wenn Sie Override verwenden, können Sie etwas Code ausführen, nur nachdem Theme angewendet wurde." –

0

OnX, weil es meist die bevorzugte Technik für die Behandlung des Ereignisses in einer abgeleiteten Klasse nach MSDN ist.

1

OnInit ist besser, weil es auf Klassenebene Initialisierung ist, während Seiteninitialisierung kann redundante Wirkung haben, weil Sie überprüfen müssen, ob es ein Postback ist oder nicht.

Verwandte Themen