Wenn Sie ein neues Webbenutzersteuerelement in Visual Studio erstellen, wird standardmäßig das Ereignis Page_Load hinzugefügt. Welchen Vorteil bietet dies, anstatt das Basis-Ereignis OnLoad
auf dem Steuerelement zu überschreiben? Ist es nur, dass das Ereignis Page_Load
vor OnLoad
ausgelöst wird?Beim Erstellen eines Websteuerelements sollten Sie OnLoad überschreiben oder Page_Load implementieren
Antwort
Die Methode OnLoad
sollte der Ort sein, an dem das Ereignis Load
ausgelöst wird. Ich persönlich versuche immer, mit dem Event fertig zu werden, es sei denn, ich muss extra um das Event kümmern.
Ich empfehle die Behandlung des Ereignisses selbst unter normalen Umständen.
Sie können dieses article auf dem Seitenlebenszyklus von Microsoft nützlich finden.
Auch wenn Sie von UserControl
erben, sollten Sie die geschützten Methoden nicht außer Kraft setzen, wenn Sie nicht müssen. Die Page_Load
ist da, um es Ihnen leichter zu machen, den Code hinzuzufügen, der spezifisch für Ihre UserControl
ist.
Nur überschreiben OnLoad
, wenn Sie absolute Kontrolle darüber haben müssen, wann (/ if) das Load
Ereignis ausgelöst wird (was selten sein sollte, IMO).
Es ist wirklich nur eine Frage der Wahl. Mir erscheint es merkwürdig, dass ein Objekt ein Ereignis an sich selbst anbringt, besonders wenn es eine Methode gibt, die man überschreiben kann.
Ich denke, das ASP.NET-Team verwendet Ereignisse, weil das das Modell für Global.asa in ASP war, und die Leiste für Entwickler, die Vererbung und überschreiben virtuelle Methoden nicht verstehen.
Das Überschreiben der Methode erfordert mehr Wissen über den Seitenlebenszyklus, aber es ist nichts "falsch" damit.
Wie Sie oben sehen können, kommt es meistens auf die persönliche Wahl an, WENN diese Wahl bewusst getroffen wird. Die beste schnelle, aber solide Übersicht, die ich gesehen habe, ist um http://weblogs.asp.net/infinitiesloop/archive/2008/03/24/onload-vs-page-load-vs-load-event.aspx
ich denke, es ist das gleiche. IMHO, mit Events, haben Sie ein bisschen mehr Flexibilität, weil Sie mehr als einen Listener zu Ihrer Veranstaltung passieren können!
Ich denke, es gibt einen potenziell signifikanten Unterschied in den beiden Methoden.
Was ich meine, ist die Fähigkeit, Kontrolle über die Ausführungsreihenfolge zu haben.
Wenn Sie überschreiben, wissen Sie, wann die Basisklassen geladen werden, weil Sie sie aufrufen. Dies bietet mehr Kontrolle, ist aber wahrscheinlich eine schlechte Sache, wie viele argumentieren werden.
Wenn Sie ein Ereignis verwenden, haben Sie keine Garantie in Bezug auf die Reihenfolge des Anrufs. Dies zwingt Sie dazu, ein Load-Ereignis zu schreiben, das agnostisch sein sollte, was Super-Klassen während der Ladephase tun. Ich denke, dies wäre der bevorzugte Ansatz und deshalb ist der VS-Code, der automatisch generiert wird, auch so.
Lesen Sie den Abschnitt mit der Bezeichnung: "Binding Page Events" auf der MSDN-Seite mit dem Titel: "ASP.NET-Webserversteuerereignismodell“ (link to the page) Es gibt einige nützliche Aussagen wie diese:.
Ein Nachteil des AutoEventWireup Attribut ist, dass es erfordert, dass die Seite Event-Handler haben spezifische, vorhersehbare Namen Dieser begrenzt die Flexibilität bei der Benennung von Ereignisprozeduren Ein weiterer Nachteil ist, dass die Leistung beeinträchtigt ist, da ASP.NET nach Methoden zur Laufzeit sucht.Für eine Website mit hohem Verkehrsaufkommen könnte die Auswirkung auf die Leistung erheblich sein.
(AutoEventWireup Flag schaltet solche Methoden wie Page_Load)
- 1. Unterschied zwischen page_load und onLoad
- 2. Page_Load oder Page_Init
- 3. Verwenden Sie Onload oder bereit?
- 4. Überschreiben Sie eine Überschreibung von onLoad (e), aber rufen Sie die niedrigste Basisimplementierung auf
- 5. Sollten wir immer gleich überschreiben?
- 6. Welches Ereignis hat zuerst angerufen? Masterseite Page_Load oder Inhaltsseite Page_Load
- 7. Überschreiben der ID beim Erstellen in ActiveRecord
- 8. Ausschließen oder Überschreiben eines AAR-Manifests
- 9. ReSharper Vorschlag Page_Load = Pageload
- 10. Entwerfen eines Websteuerelements mit mehreren Steuerelementen, alle programmierbar editierbar
- 11. Welche Schichten sollten beim Training eines Neuronalen Netzwerks "Dropout" erfahren?
- 12. Implementieren eines Fallback beim Abrufen mehrsprachiger Daten
- 13. Brauchen Sie Hilfe beim Implementieren eines Arrays in MIPS
- 14. Ermitteln, ob Postback page_load oder itemcommand ist
- 15. Benötigen Sie Hilfe beim Implementieren eines Basis-Serialisierers in DJango
- 16. Wenn Sie IXmlSerializable implementieren, wie überschreiben Sie nur entweder ReadXml oder WriteXml und nicht beides?
- 17. Sollten Repositorys IQueryable <T> implementieren?
- 18. Sollten Sie jQuery und/oder jQueryUI vermeiden?
- 19. Objekt auf page_load erstellen und an JQuery übergeben
- 20. Berechtigungsfenster beim Erstellen eines Dokumentbibliothekselementes
- 21. Datumsformatierung beim Erstellen eines Modells
- 22. Spielkarten: Sollten sie enum oder struct oder class sein?
- 23. Sollten wir ein PHP-Framework verwenden oder unser eigenes erstellen?
- 24. Hilfe beim Erstellen eines Zeitplangenerators
- 25. Erstellen Sie ein XML-Dokument manuell oder implementieren Sie dom-Schnittstellen oder ...?
- 26. IOException ("Datei oder Verzeichnis existiert bereits") beim Erstellen eines Verzeichnisses
- 27. java.awt.AWTERROR Beim Erstellen eines BoxLayouts
- 28. UnauthorizedAccessException beim Erstellen eines Registrierungsschlüssels
- 29. Lodash: Erstellen eines einzelnen Objekts aus vielen - Zusammenführen/überschreiben Eigenschaften
- 30. Erstellen eines Verzeichnisses beim Erstellen mit Waf
vereinbart - ich glaube, es ist wichtig, ein gutes Verständnis für den gesamten Lebenszyklus zu haben. –