(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen.
Übersetzung
Original

Übersicht über den Lebenszyklus von ASP.NET-Seiten

Bei der Ausführung einer ASP.NET-Seite durchläuft diese Seite einen Lebenszyklus, der sich aus einer Reihe von Verarbeitungsschritten zusammensetzt. Dazu zählen unter anderem die Initialisierung, das Instanziieren von Steuerelementen, das Wiederherstellen und Aufrechterhalten des Zustands, das Ausführen von Ereignishandlercode und das Rendern. Es ist wichtig, sich mit dem Lebenszyklus einer Seite vertraut zu machen, damit Code entsprechend der Phase eines Lebenszyklus geschrieben werden kann, um die beabsichtigte Wirkung zu erzielen.

Bei der Entwicklung benutzerdefinierter Steuerelemente ist es erforderlich, dass Sie mit dem Lebenszyklus der Seite vertraut sind, damit Sie Steuerelemente ordnungsgemäß initialisieren, Steuerelementeigenschaften mit Ansichtszustandsdaten auffüllen und den gewünschten Verhaltenscode von Steuerelementen ausführen können. Der Lebenszyklus eines Steuerelements basiert auf dem Lebenszyklus der Seite, und die Seite löst eine Vielzahl der Ereignisse aus, die Sie zur Behandlung eines benutzerdefinierten Steuerelements benötigen.

Dieses Thema enthält folgende Abschnitte:

Im Allgemeinen durchläuft die Seite die in der folgenden Tabelle dargestellten Phasen. Zusätzlich zu den Phasen im Lebenszyklus der Seite gibt es Anwendungsphasen, die vor und nach einer Anforderung eintreten. Diese Phasen sind jedoch nicht seitenspezifisch. Weitere Informationen finden Sie unter Introduction to the ASP.NET Application Life Cycle und Übersicht über den Lebenszyklus von ASP.NET-Anwendungen für IIS 7.0.

Einige Teile des Lebenszyklus finden nur statt, wenn eine Seite als Postback verarbeitet wird. Bei Postbacks ist der Seitenlebenszyklus während eines Teilpostbacks der Seite (z. B. bei Verwendung eines UpdatePanel-Steuerelements) mit dem Lebenszyklus während eines Postbacks der ganzen Seite identisch.

Phase

Beschreibung

Seitenanforderung

Der Lebenszyklus einer Seite beginnt, nachdem die Seite angefordert wurde. Wenn ein Benutzer die Seite anfordert, prüft ASP.NET, ob die Seite analysiert und kompiliert werden muss (Beginn des Lebenszyklus einer Seite) oder ob eine zwischengespeicherte Version der Seite zurückgesendet werden kann, ohne dass die Seite verarbeitet werden muss.

Start

In der Startphase werden Seiteneigenschaften wie Request und Response festgelegt. In dieser Phase wird auch bestimmt, ob es sich bei der Anforderung um ein Postback oder um eine neue Anforderung handelt, und die IsPostBack-Eigenschaft wird entsprechend festgelegt. Die Seite legt auch die UICulture-Eigenschaft fest.

Initialisierung

Während der Seiteninitialisierung sind die Steuerelemente auf der Seite verfügbar, und die UniqueID-Eigenschaft jedes Steuerelements wird festgelegt. Auf die Seite werden ggf. auch eine Masterseite und Designs angewendet. Wenn es sich bei der aktuellen Anforderung um ein Postback handelt, sind die Postbackdaten noch nicht geladen, und die Eigenschaftswerte des Steuerelements wurden noch nicht mit den Werten aus dem Ansichtszustand wiederhergestellt.

Laden

Wenn es sich bei der aktuellen Anforderung um ein Postback handelt, werden die Steuerelementeigenschaften während der Ladephase mithilfe von Informationen aus dem Ansichtszustand und dem Steuerelementzustand wiederhergestellt.

Behandlung von Postbackereignissen

Wenn es sich bei der Anforderung um ein Postback handelt, werden sämtliche Ereignishandler von Steuerelementen aufgerufen. Anschließend wird die Validate-Methode aller Validierungssteuerelemente aufgerufen, die die IsValid-Eigenschaft einzelner Validierungssteuerelemente sowie der Seite festlegt.

Rendering

Vor dem Rendern werden der Ansichtszustand für die Seite sowie alle Steuerelemente gespeichert. Während der Renderingphase ruft die Seite die Render-Methode für jedes Steuerelement auf. Dadurch wird ein TextWriter bereitgestellt, der seine Ausgabe in das OutputStream-Objekt der Response-Eigenschaft der Seite schreibt.

Entladen

Nachdem die Seite vollständig gerendert und an den Client gesendet wurde und daher verworfen werden kann, wird das Unload-Ereignis ausgelöst. An dieser Stelle werden Seiteneigenschaften wie Response und Request entladen, und es werden sämtliche Bereinigungsoperationen ausgeführt.

Die Seite löst in jeder Phase ihres Lebenszyklus Ereignisse aus, die Sie behandeln können, um eigenen Code auszuführen. Bei Steuerelementereignissen wird der Ereignishandler entweder deklarativ mithilfe von Attributen wie onclick oder im Code an das Ereignis gebunden.

Seiten unterstützen auch automatische Ereignisverknüpfung. Dies bedeutet, dass ASP.NET beim Auslösen bestimmter Ereignisse nach Methoden mit bestimmten Namen sucht und diese automatisch ausführt. Wenn das AutoEventWireup-Attribut der @ Page-Direktive auf true festgelegt ist, werden Seitenereignisse automatisch an Methoden gebunden, die die Namenskonvention Page_Ereignis verwenden, z. B. Page_Load und Page_Init Weitere Informationen zur automatischen Ereignisverknüpfung finden Sie unter Ereignismodell für ASP.NET-Webserversteuerelemente.

In der folgenden Tabelle werden die Lebenszyklusereignisse der Seite aufgelistet, die am häufigsten verwendet werden. Es sind weitere Ereignisse verfügbar, die bei den meisten Seitenverarbeitungsszenarien jedoch keine Verwendung finden. Stattdessen werden sie hauptsächlich von Serversteuerelementen auf der ASP.NET-Webseite für die Initialisierung und das Rendern verwendet. Wenn Sie benutzerdefinierte ASP.NET-Serversteuerelemente schreiben möchten, sollten Sie umfangreiche Kenntnisse über die folgenden Ereignisse besitzen. Informationen zum Erstellen benutzerdefinierter Steuerelemente finden Sie unter Entwickeln von benutzerdefinierten ASP.NET-Serversteuerelementen.

Seitenereignis

Typische Verwendung

PreInit

Wird ausgelöst, nachdem die Startphase abgeschlossen ist und bevor die Initialisierungsphase beginnt.

Verwenden Sie dieses Ereignis für folgende Vorgänge:

  • Prüfen mithilfe der IsPostBack-Eigenschaft, ob die Seite zum ersten Mal verarbeitet wird. Zu diesem Zeitpunkt wurden auch die IsCallback-Eigenschaft und die IsCrossPagePostBack-Eigenschaft festgelegt.

  • Erstellen oder erneutes Erstellen von dynamischen Steuerelementen.

  • Dynamisches Festlegen einer Masterseite.

  • Dynamisches Festlegen der Theme-Eigenschaft.

  • Lesen oder Festlegen von Profileigenschaftswerten.

    HinweisHinweis
    Wenn es sich bei der Anforderung um ein Postback handelt, wurden die Werte der Steuerelemente noch nicht aus dem Ansichtszustand wiederhergestellt.Wenn Sie in dieser Phase eine Steuerelementeigenschaft festlegen, wird ihr Wert möglicherweise beim nächsten Ereignis überschrieben.

Init

Dieses Ereignis wird ausgelöst, nachdem alle Steuerelemente initialisiert und alle Skineinstellungen übernommen wurden. Das Init-Ereignis einzelner Steuerelemente tritt vor dem Init-Ereignis der Seite auf.

Verwenden Sie dieses Ereignis zum Lesen oder Initialisieren von Steuerelementeigenschaften.

InitComplete

Wird am Ende der Initialisierungsphase der Seite ausgelöst. Zwischen dem Init-Ereignis und dem InitComplete-Ereignis findet nur ein Vorgang statt: Die Verfolgung von Ansichtszustandsänderungen wird aktiviert. Die Verfolgung des Ansichtszustands aktiviert Steuerelemente, um beliebige Werte beizubehalten, die der ViewState-Auflistung programmgesteuert hinzugefügt werden. Bis die Nachverfolgung des Ansichtszustands aktiviert wird, gehen alle Werte, die dem Ansichtszustand hinzugefügt werden, über Postbacks verloren. Die Verfolgung des Ansichtszustands wird von Steuerelementen in der Regel aktiviert, nachdem das Init-Ereignis ausgelöst wurde.

Verwenden Sie dieses Ereignis, um Änderungen am Ansichtszustand vorzunehmen, die nach dem nächsten Postback immer noch vorhanden sein sollen.

PreLoad

Wird ausgelöst, nachdem die Seite den eigenen Ansichtszustand und den aller Steuerelemente geladen hat und nachdem Postbackdaten verarbeitet wurden, die in derRequest-Instanz enthalten sind.

Load

Das Page-Objekt ruft die OnLoad-Methode für das Page-Objekt auf. Dieser Schritt wird rekursiv für alle untergeordneten Steuerelemente und deren untergeordnete Steuerelemente wiederholt, bis die Seite und die Steuerelemente vollständig geladen sind. Das Load-Ereignis einzelner Steuerelemente tritt nach dem Load-Ereignis der Seite auf.

Verwenden Sie die OnLoad-Ereignismethode, um Eigenschaften in Steuerelementen festzulegen und Datenbankverbindungen herzustellen.

Steuerelementereignisse

Verwenden Sie diese Ereignisse, um bestimmte Steuerelementereignisse zu verwalten, wie z. B. das Click-Ereignis eines Button-Steuerelements oder das TextChanged-Ereignis eines TextBox-Steuerelements.

HinweisHinweis
Überprüfen Sie bei einer Postbackanforderung die IsValid-Eigenschaft von Page und einzelnen Validierungssteuerelemente vor der Verarbeitung, wenn die Seite Validierungssteuerelemente enthält.

LoadComplete

Wird am Ende der Ereignisbehandlungsphase ausgelöst.

Verwenden Sie dieses Ereignis für Aufgaben, für die alle anderen Steuerelemente auf der Seite geladen sein müssen.

PreRender

Wird ausgelöst, nachdem das Page-Objekt alle Steuerelemente erstellt hat, die erforderlich sind, um die Seite, einschließlich untergeordneter Steuerelemente zusammengesetzter Steuerelemente, zu rendern. (Zu diesem Zweck wird die EnsureChildControls-Methode vom Page-Objekt für jedes Steuerelement und für die Seite aufgerufen.)

Das Page-Objekt löst das PreRender-Ereignis auf dem Page-Objekt aus und führt den gleichen Vorgang dann rekursiv für jedes untergeordnete Steuerelement aus. Das PreRender-Ereignis einzelner Steuerelemente tritt nach dem PreRender-Ereignis der Seite auf.

Verwenden Sie das Ereignis, um abschließende Änderungen am Inhalt der Seite oder an darin enthaltenen Steuerelementen vorzunehmen, bevor das Rendern beginnt.

PreRenderComplete

Wird aufgerufen, nachdem jedes datengebundene Steuerelement, dessen DataSourceID-Eigenschaft festgelegt wurde, seine DataBind-Methode aufruft. Weitere Informationen finden Sie im Folgenden unter Datenbindungsereignisse für datengebundene Steuerelemente.

SaveStateComplete

Wird ausgelöst, nachdem der Ansichtszustand und der Steuerelementzustand für die Seite und alle Steuerelemente gespeichert wurden. Alle Änderungen an der Seite oder den Steuerelementen haben zu diesem Zeitpunkt zwar Auswirkungen auf das Rendering, sie werden aber beim nächsten Postback nicht abgerufen.

Render

Hierbei handelt es sich nicht um ein Ereignis. Stattdessen wird diese Methode in dieser Phase der Verarbeitung vom Page-Objekt für jedes Steuerelement aufgerufen. Alle ASP.NET-Webserversteuerelemente verfügen über eine Render-Methode, die das an den Browser gesendete Markup des Steuerelements ausgibt.

Wenn Sie ein benutzerdefiniertes Steuerelement erstellen, überschreiben Sie diese Methode normalerweise, um das Markup des Steuerelements auszugeben. Wenn Ihr benutzerdefiniertes Steuerelement jedoch nur standardmäßige ASP.NET-Webserversteuerelemente und kein benutzerdefiniertes Markup enthält, muss die Render-Methode nicht überschrieben werden. Weitere Informationen finden Sie unter Entwickeln von benutzerdefinierten ASP.NET-Serversteuerelementen.

Bei einem Benutzersteuerelement (ASCX-Datei) wird das Rendering automatisch mit eingebunden. Daher ist ein explizites Rendern im Code des Steuerelements nicht erforderlich.

Unload

Wird für jedes Steuerelement und dann für die Seite ausgelöst.

Verwenden Sie dieses Ereignis für die abschließende Bereinigung bestimmter Steuerelemente, wie z. B. für das Schließen steuerelementspezifischer Datenbankverbindungen.

Die Seite selbst kann mit diesem Ereignis ebenfalls abschließend bereinigt werden. Dabei werden offene Dateien und Datenbankverbindungen geschlossen und Anmeldevorgänge bzw. andere anforderungsspezifische Aufgaben abgeschlossen.

HinweisHinweis
Die Seite und ihre Steuerelemente wurden während der Phase des Entladens gerendert. Daher können Sie keine weiteren Änderungen an dem Antwortstream vornehmen.Bei dem Versuch, eine Methode aufzurufen, z. B. die Response.Write-Methode, wird von der Seite eine Ausnahme ausgelöst.

Einzelne ASP.NET-Serversteuerelemente verfügen über einen eigenen Lebenszyklus, der dem Lebenszyklus der Seite ähnelt. So werden zum Beispiel das Init-Ereignis und das Load-Ereignis eines Steuerelements während der entsprechenden Seitenereignisse ausgelöst.

Obwohl Init und Load rekursiv für jedes Steuerelement ausgelöst werden, geschieht dies in umgekehrter Reihenfolge. Das Init-Ereignis wird (zusammen mit dem Unload-Ereignis) für jedes untergeordnete Steuerelement aufgerufen, bevor das zugehörige Ereignis für dessen Container ausgelöst wird (von unten nach oben). Das Load-Ereignis für einen Container wird dagegen vor den Load-Ereignissen für die zugehörigen untergeordneten Steuerelemente aufgerufen (von oben nach unten). Masterseiten verhalten sich wie untergeordnete Steuerelemente auf einer Seite: Das Init-Ereignis der Masterseite tritt vor den Load- und Init-Ereignissen der Seite auf, und das Load-Ereignis der Masterseite tritt nach den Load- und Init-Ereignissen der Seite auf.

Wenn Sie eine Klasse erstellen, die von der Page-Klasse geerbt wird, können Sie neben der Behandlung von Ereignissen, die von der Seite ausgelöst werden, auch Methoden aus der Basisklasse der Seite überschreiben. So können Sie zum Beispiel die InitializeCulture-Methode der Seite dahingehend überschreiben, dass Kulturinformationen dynamisch festgelegt werden. Beachten Sie, dass beim Erstellen eines Ereignishandlers unter Verwendung der Page_Ereignis-Syntax die Basisimplementierung implizit aufgerufen wird und Sie daher diese Basisimplementierung in Ihrer Methode nicht mehr aufrufen müssen. So wird zum Beispiel die OnLoad-Methode der Basisseitenklasse immer aufgerufen, unabhängig davon, ob Sie eine Page_Load-Methode erstellen oder nicht. Wenn Sie jedoch die OnLoad-Methode der Seite mit dem override-Schlüsselwort (Overrides in Visual Basic) überschreiben, müssen Sie die Basismethode explizit aufrufen. Wenn Sie zum Beispiel die OnLoad-Methode der Seite überschreiben, müssen Sie base.Load (MyBase.Load in Visual Basic) aufrufen, damit die Basisimplementierung ausgeführt wird.

In der folgenden Abbildung ist eine der wichtigsten Methoden der Page-Klasse dargestellt, die Sie überschreiben können, um Code hinzuzufügen, der im Lebenszyklus der Seite an bestimmten Punkten ausgeführt wird. (Eine vollständige Liste der Seitenmethoden und -ereignisse finden Sie im Abschnitt zur Page-Klasse.) Die Abbildung zeigt auch, wie diese Methoden mit Seitenereignissen und Steuerelementereignissen zusammenhängen. Die Methoden und Ereignisse sind in der Abbildung von oben nach unten und innerhalb jeder Zeile von links nach rechts aufgeführt.

Diagramm zum Lebenszyklus der ASP.NET-Seite

Wenn Steuerelemente dynamisch zur Laufzeit oder deklarativ in Vorlagen datengebundener Steuerelemente erstellt werden, werden die zugehörigen Ereignisse mit denen anderer Steuerelemente der Seite zunächst nicht synchronisiert. Beispielsweise können das Init-Ereignis und das Load-Ereignis bei einem Steuerelement, das zur Laufzeit hinzugefügt wird, viel später im Lebenszyklus der Seite auftreten als die gleichen Ereignisse bei Steuerelementen, die deklarativ erstellt werden. Daher lösen dynamisch hinzugefügte Steuerelemente sowie Steuerelemente in Vorlagen die Ereignisse ab dem Zeitpunkt ihrer Instanziierung nacheinander aus, bis sie mit dem Ereignis synchronisiert sind, bei dem sie zur Controls-Auflistung hinzugefügt wurden.

Zum besseren Verständnis der Beziehung zwischen dem Lebenszyklus der Seite und Datenbindungsereignissen sind in der folgenden Tabelle datenbezogene Ereignisse von datengebundenen Steuerelementen aufgelistet, wie z. B. den Steuerelementen GridView, DetailsView und FormView.

Steuerelementereignis

Typische Verwendung

DataBinding

Wird nach dem PreRender-Ereignis des Steuerelements ausgelöst, das nach dem PreRender-Ereignis der Seite auftritt. (Dies gilt für Steuerelemente, deren DataSourceID-Eigenschaft deklarativ festgelegt wird. Andernfalls wird das Ereignis ausgelöst, wenn Sie die DataBind-Methode des Steuerelements aufrufen.)

Dieses Ereignis kennzeichnet den Beginn des Prozesses, der das Steuerelement an die Daten bindet. Verwenden Sie dieses Ereignis, um Datenbankverbindungen bei Bedarf manuell zu öffnen und Parameterwerte dynamisch festzulegen, bevor eine Abfrage ausgeführt wird.

RowCreated (nur GridView) oder ItemCreated (DataList-, DetailsView-, SiteMapPath-, DataGrid-, FormView-, Repeater- und ListView-Steuerelemente.)

Wird nach dem DataBinding-Ereignis des Steuerelements ausgelöst.

Mit diesem Ereignis können Sie Inhalte bearbeiten, die nicht von Datenbindung abhängig sind. Beispielsweise können Sie zur Laufzeit programmgesteuert eine Formatierung zu einer Kopf- oder Fußzeile in einem GridView-Steuerelement hinzufügen.

RowDataBound (nur GridView) oder ItemDataBound (DataList-, SiteMapPath-, DataGrid-, Repeater- und ListView-Steuerelemente)

Wird nach dem RowCreated-Ereignis oder dem ItemCreated-Ereignis des Steuerelements ausgelöst.

Wenn dieses Ereignis auftritt, sind Daten in der Zeile oder im Element verfügbar, sodass Sie die Daten formatieren oder die FilterExpression-Eigenschaft für untergeordnete Datenquellensteuerelemente festlegen können, um verknüpfte Daten in der Zeile oder im Element anzuzeigen.

DataBound

Wird am Ende von Datenbindungsvorgängen in einem datengebundenen Steuerelement ausgelöst. In einem GridView-Steuerelement ist die Datenbindung für alle Zeilen und untergeordneten Steuerelemente abgeschlossen.

Verwenden Sie dieses Ereignis, um datengebundene Inhalte zu formatieren oder die Datenbindung in anderen Steuerelementen zu initiieren, die vom Inhalt des aktuellen Steuerelements abhängig sind. (Weitere Informationen finden Sie unter Synchronisieren von Ereignissen für hinzugefügte Steuerelemente weiter oben in diesem Thema.)

Geschachtelte datengebundene Steuerelemente

Wenn ein untergeordnetes Steuerelement an Daten gebunden wurde, das zugehörige Containersteuerelement jedoch noch nicht, sind die Daten im untergeordneten Steuerelement mit den Daten im Containersteuerelement möglicherweise nicht synchronisiert. Dies kann insbesondere der Fall sein, wenn von den Daten im untergeordneten Steuerelement eine Verarbeitung auf Basis eines datengebundenen Werts im Containersteuerelement durchgeführt wird.

Angenommen, Sie haben ein GridView-Steuerelement, das in jeder Zeile einen Unternehmensdatensatz und eine Liste der Unternehmenschefs in einem ListBox-Steuerelement anzeigt. Um die Liste der Chefs zu füllen, binden Sie das ListBox-Steuerelement an ein Datenquellensteuerelement (z. B. SqlDataSource), das die Daten der Unternehmenschefs mithilfe der CompanyID in einer Abfrage abruft.

Wenn die Datenbindungseigenschaften des ListBox-Steuerelements, wie z. B. DataSourceID und DataMember, deklarativ festgelegt werden, versucht das ListBox-Steuerelement während des DataBinding-Ereignisses der zugehörigen Zeile, eine Bindung mit der zugehörigen Datenquelle einzugehen. Das Feld CompanyID der Zeile enthält jedoch keinen Wert, bis das RowDataBound-Ereignis des GridView-Steuerelements ausgelöst wird. In diesem Fall wird das untergeordnete Steuerelement (das ListBox-Steuerelement) vor dem Steuerelement gebunden, in dem es enthalten ist (das GridView-Steuerelement). Die Phasen der Datenbindung sind daher nicht synchronisiert.

Um diesen Zustand zu vermeiden, legen Sie das Datenquellensteuerelement des ListBox-Steuerelements im gleichen Vorlagenelement fest wie das ListBox-Steuerelement selbst, und legen Sie die Datenbindungseigenschaften von ListBox nicht deklarativ fest. Stattdessen legen Sie diese programmgesteuert zur Laufzeit während des RowDataBound-Ereignisses fest, sodass das ListBox-Steuerelement erst an die Daten gebunden wird, wenn die CompanyID-Informationen verfügbar sind.

Weitere Informationen finden Sie unter Binden an Daten mit einem Datenquellensteuerelement.

Mithilfe der Einstellungen in der Datei Web.config kann das Login-Steuerelement die Authentifizierung von Mitgliedschaften automatisch verwalten. Wenn die Funktionsweise des Steuerelements jedoch an Ihre Anwendung angepasst werden muss oder Sie verstehen möchten, wie Ereignisse des Login-Steuerelements mit dem Lebenszyklus einer Seite in Zusammenhang stehen, können Sie die Ereignisse in der folgenden Tabelle verwenden.

Steuerelementereignis

Typische Verwendung

LoggingIn

Wird während eines Postbacks ausgelöst, nachdem das LoadComplete-Ereignis der Seite aufgerufen wurde. Dieses Ereignis markiert den Anfang des Anmeldeprozesses.

Verwenden Sie dieses Ereignis für Aufgaben, die vor Beginn des Authentifizierungsvorgangs ausgeführt werden müssen.

Authenticate

Wird ausgelöst, nachdem das LoggingIn-Ereignis ausgelöst wurde.

Verwenden Sie dieses Ereignis, um das Standardauthentifizierungsverhalten eines Login-Steuerelements zu überschreiben oder zu erweitern.

LoggedIn

Wird nach der Authentifizierung von Benutzername und Kennwort ausgelöst.

Verwenden Sie dieses Ereignis, um eine Weiterleitung zu einer anderen Seite auszuführen oder um den Text im Steuerelement dynamisch festzulegen. Dieses Ereignis wird nicht ausgelöst, wenn ein Fehler auftritt oder die Authentifizierung fehlschlägt.

LoginError

Wird ausgelöst, wenn die Authentifizierung nicht erfolgreich war.

Verwenden Sie dieses Ereignis, um einen Text im Steuerelement festzulegen, der das Problem erläutert, oder um den Benutzer auf eine andere Seite zu leiten.

Datum

Versionsgeschichte

Grund

Mai 2011

Ein Hinweis zur Ereignisreihenfolge in Masterseiten wurde hinzugefügt.

Korrektur inhaltlicher Fehler.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft