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
Ich hatte diese Frage vor etwa einem Jahr, ich entschied mich im Gegensatz zu den On_X Events zu übersteuern. Hier ist der Artikel über die Vor- und Nachteile: http://weblogs.asp.net/infinitiesloop/archive/2008/03/24/onload-vs-page-load-vs-load-event.aspx
Es gibt eine gute Antwort hier http://objectmix.com/dotnet/251824-oninit-page_init.html.
http://www.justskins.com/forums/page_init-and-page_load-59045.html hat eine tiefere Antwort.
Wenn AutoEventWireup auf false festgelegt ist, müssen Sie OnInit überschreiben, da Page_Init nicht automatisch verfügbar ist.
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.
Außerdem können Sie auswählen, ob und wann die Basismethode aufgerufen werden soll - das geht nicht mit dem Page_Load-Stil –
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.
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! –
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." –
OnX, weil es meist die bevorzugte Technik für die Behandlung des Ereignisses in einer abgeleiteten Klasse nach MSDN ist.
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.
- 1. Angular 2 Komponenten Konstruktor Vs OnInit
- 2. Page_Load oder Page_Init
- 3. ASP.NET Page_Init zweimal gefeuert!
- 4. Angular2 Router und OnInit
- 5. ASP.NET-Ereignis zum Festlegen der Eigenschaft vor OnInit ausgeführt wird
- 6. Web-Formulare Dienste initialisieren in Page_Init
- 7. Angular2 - OnInit nicht definiert ist
- 8. OnInit und __init__ in wxPython
- 9. Application_Start versus OnInit versus Konstruktor
- 10. Angular2 - OnInit-Zugriff auf Funktionen
- 11. Verwenden des OnInit-Ereignisses in asp.net
- 12. Angular2 Abhängigkeitsinjektion vs @ViewChild
- 13. NSIS-Installer .onInit und un.onInit zweimal wegen UAC ausgeführt
- 14. Wie $ onInit oder $ onChanges implizit in Komponententests ausgelöst werden?
- 15. Verweis auf lokales jQuery.sap.storage initialisiert in OnInit in anderen Funktionen
- 16. Warum wird die $ onInit-Methode im folgenden Beispiel nicht aufgerufen?
- 17. Wie Asp.net AJAX intellisense auf einer Kontrolle nach OnInit
- 18. Angular2, Verwenden der onInit der Hauptkomponente, um Dienste anzurufen
- 19. wie man verwendet router.navigate auf app.component die onInit in angular2
- 20. onInit, onAfterRendering nicht aufgerufen, wenn zurück auf die Seite
- 21. Exec vs ExecWait vs ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs ExecDos vs ExeCmd
- 22. Dynamisch geladenes Steuerelement - wie kann ich auf einen Wert in Page_Init zugreifen
- 23. Klasse vs Paket vs Modul vs Komponente vs Container vs Service vs Plattform in Java Welt
- 24. Opa vs Dart vs Haxe vs Coffee
- 25. Akkumulieren vs falten vs reduzieren vs komprimieren
- 26. body.scrollTop vs documentElement.scrollTop vs window.pagYOffset vs window.scrollY
- 27. ACE vs Boost vs Poco vs wxWidgets
- 28. Inline vs __inline vs __inline__ vs __forceinline?
- 29. Metaphon vs Levenshtein vs Soundex vs Hamming
- 30. Standort vs GeoPoint vs 1E6 vs Aufladen
Danke Nick! Das war ein guter Artikel. Ich war auf der Suche nach so etwas. Ich schätze es sehr. : =) –