Dynamische Webserversteuerelemente und der Ansichtszustand
Aktualisiert: November 2007
Bei der dynamischen Erstellung eines Webserversteuerelements zur Laufzeit werden einige Informationen über das Steuerelement im Ansichtszustand gespeichert, der mit der Seite dargestellt wird. Wenn jedoch die Seite an den Server zurückgesendet wird, werden die nicht dynamischen Steuerelemente, die auf der Seite definiert sind, im Init-Ereignis der Seite instanziiert. Die Ansichtszustandsinformationen werden geladen, bevor die dynamischen Steuerelemente neu erstellt werden können (i. d. R. im Page_Load-Handler). Bis die dynamischen Steuerelemente neu erstellt sind, ist der Ansichtszustand daher vorübergehend nicht mit den Steuerelementen der Seite synchron. Nach der Ausführung des Page_Load-Ereignisses, jedoch vor Aufruf der Methoden für die Behandlung des Steuerelementereignisses, werden die restlichen Ansichtszustandsinformationen in die dynamisch erstellten Steuerelemente geladen.
In den meisten Szenarien funktioniert dieses Modell für die Ansichtszustandsverarbeitung einwandfrei. Dynamische Steuerelemente werden i. d. R.am Ende der Steuerelementauflistung eines Containers hinzugefügt. Die für die dynamischen Steuerelemente gespeicherten Ansichtszustandsinformationen sind daher Zusatzinformationen am Ende der Ansichtszustandsstruktur für den entsprechenden Container. Die Seite kann diese Informationen ignorieren, bis die Steuerelemente erstellt sind.
Ansichtszustandsinformationen über dynamisch erstellte Steuerelemente können jedoch in zwei Szenarien ein Problem darstellen:
Wenn Sie dynamische Steuerelemente zwischen vorhandenen Steuerelementen einfügen.
Wenn Sie Steuerelemente dynamisch einfügen und sie anschließend in einer Schleife erneut einfügen, jedoch mit anderen Werten.
Wenn Sie dynamische Steuerelemente zwischen vorhandenen Steuerelementen einfügen, werden die Ansichtszustandsinformationen des dynamischen Steuerelements an der entsprechenden Position der Ansichtszustandsstruktur eingefügt. Wenn die Seite gesendet wurde und der Ansichtszustand geladen ist, ist das dynamische Steuerelement noch nicht vorhanden. Die Zusatzinformationen im Ansichtszustand entsprechen daher nicht dem richtigen Steuerelement. Aus diesem Grund wird i. d. R. eine Fehlermeldung ausgegeben, die auf eine ungültige Umwandlung hinweist.
Wenn Sie in jeder Schleife Steuerelemente erneut einfügen, übernehmen die dynamisch erstellten Steuerelemente bei jedem Generieren die Eigenschaftenwerte aus dem Ansichtszustand der in der vorherigen Schleife erstellten Gruppe von Steuerelementen. Häufig kann dieses Problem umgangen werden, indem die EnableViewState-Eigenschaft des Containersteuerelements auf false festgelegt wird. In diesem Fall werden keine Informationen über die dynamischen Steuerelemente gespeichert, und es entsteht kein Konflikt mit späteren Steuerelementversionen.
Weitere Informationen zum Ansichtszustand finden Sie unter
Übersicht über den Lebenszyklus von ASP.NET-Seiten
Übersicht über die ASP.NET-Zustandsverwaltung und ViewState.
Siehe auch
Weitere Ressourcen
Programmgesteuertes Hinzufügen von ASP.NET-Steuerelementen
Programmgesteuertes Festlegen der Eigenschaften von ASP.NET-Serversteuerelementen