Steuerelementidentifikation in Web Forms

Aktualisiert: November 2007

Jedes Steuerelement auf einer ASP.NET-Webseite muss eindeutig identifizierbar sein. In der Regel weisen Sie der ID-Eigenschaft eines Steuerelements einen Wert zu, um es eindeutig zu identifizieren. Dieser Wert wird dann zum Instanznamen des Steuerelements. Der Instanzname ist der Name, über den Sie im Code auf das Steuerelement verweisen können. Wenn Sie beispielsweise die ID-Eigenschaft eines TextBox-Steuerelements auf den Wert Text1 festlegen, können Sie sich im Code mit der Angabe von Text1 auf dieses Steuerelement beziehen.

Eine Reihe von datengebundenen Steuerelementen, u. a. die Steuerelemente DataList, Repeater, GridView, FormView und DetailsView, fungieren als Container für andere (untergeordnete) Steuerelemente. Wenn diese Steuerelemente ausgeführt werden, generieren sie mehrere Instanzen des untergeordneten Steuerelements. Wenn Sie beispielsweise eine DataList-Vorlage mit einem integrierten Label-Steuerelement erstellen, werden beim Ausführen der Seite so viele Instanzen des Label-Steuerelements auf der Seite erzeugt, wie Datensätze in der Datenquelle des DataList-Steuerelements vorhanden sind.

Hinweis:

Steuerelemente, die Vorlagen verwenden, z. B. das DataList-Steuerelement und das Repeater-Steuerelement, dienen als Host für Vorlagenobjekte. Wenn beispielsweise das DataList-Steuerelement ausgeführt wird, werden mehrere Instanzen der DataListItem-Klasse erstellt. Diese Vorlagenobjekte enthalten wiederum einzelne Steuerelemente, wie Bezeichnungen, Textfelder, Schaltflächen usw.

Da Steuerelemente auf einer Seite mehrfach instanziiert werden können, und da Sie die Steuerelementnamen auf verschiedenen Seiten wiederverwenden können, stellt das ASP.NET-Seitenframework Mechanismen zur Verfügung, die sicherstellen, dass die Steuerelemente auf der Seite und in Ihrer Anwendung über eindeutige Bezeichner verfügen. Das Framework bietet Ihnen außerdem mehrere Möglichkeiten, diese speziellen Steuerelemente zu finden und in Ihrem eigenen Code zu bearbeiten.

Der Bennenungscontainer

Steuerelemente, die als Container für andere Steuerelemente verwendet werden, erzeugen einen Bennenungscontainer oder einen ID-Namespace für die untergeordneten Steuerelemente. Mithilfe dieses Bennenungscontainers können die Steuerelemente sicherstellen, dass die ID-Attribute der untergeordneten Steuerelemente in der gesamten Anwendung eindeutig sind. (Steuerelemente erzeugen einen Bennenungscontainer, indem sie die INamingContainer-Schnittstelle implementieren.) Wenn untergeordnete Steuerelemente zur Laufzeit erstellt werden, wird der Bennenungscontainer mit der ID-Eigenschaft des untergeordneten Steuerelements kombiniert, um so den Wert der UniqueID-Eigenschaft für die einzelnen untergeordneten Steuerelemente zu definieren. Die UniqueID-Eigenschaft wird somit zu einem vollqualifizierten Bezeichner für ein Steuerelement. Es wird sowohl der Bennenungscontainer als auch der spezielle ID-Wert des Steuerelements referenziert.

In dem obigen Beispiel werden die mehrfachen Instanzen des Label-Steuerelements innerhalb des Bennenungscontainers erstellt, d. h. im Namespace des übergeordneten DataList-Steuerelements. Die UniqueID-Eigenschaft der einzelnen Label-Steuerelemente spiegelt diesen Namespace wider. Beispiele: DataList1:_ctl:MyLabel, DataList1:_ct2:MyLabel usw.

Hinweis:

Sie sollten keinen Code schreiben, der mit dem Wert der generierten UniqueID-Eigenschaft auf die Steuerelemente verweist. Sie können die UniqueID-Eigenschaft wie ein Handle verwenden (z. B. indem Sie sie an einen Prozess übergeben), doch Sie können sich nicht darauf verlassen, dass sie eine bestimmte Struktur aufweist.

Zusätzlich zu jedem Containersteuerelement stellt auch die Seite selbst einen Bennenungscontainer für alle untergeordneten Steuerelemente zur Verfügung. Dadurch wird ein eindeutiger Namespace innerhalb der Anwendung für alle Steuerelemente auf dieser Seite erstellt.

Verwendung der NamingContainer-Eigenschaft

Untergeordnete Steuerelemente können über die NamingContainer-Eigenschaft auf ihren Bennenungscontainer verweisen. Diese Eigenschaft gibt ein Objekt vom Typ Control zurück, das z. B. in das entsprechende DataList-Steuerelement oder das entsprechende DataListItem-Objekt umgewandelt werden kann.

Eine Referenzierung des Bennenungscontainers ist hilfreich, wenn Sie aus einem untergeordneten Steuerelement auf eine Eigenschaft des Containersteuerelements zugreifen müssen. So können Sie beispielsweise im Handler für ein DataBinding-Ereignis eines untergeordneten Steuerelements auf das DataItem-Objekt zugreifen, indem Sie es aus dem Bennenungscontainer abrufen.

Hinweis:

Die NamingContainer-Eigenschaft verweist nicht zwangsläufig auf dasselbe Steuerelement wie die Parent-Eigenschaft. So könnte sich beispielsweise in einem Repeater-Steuerelement eine Elementvorlage mit einer Tabelle befinden, die wiederum ein Label-Steuerelement enthält. Das dem Label-Steuerelement übergeordnete Steuerelement ist eine Tabellenzelle (z. B. ein HtmlTableCell-Objekt), wobei der zugehörige Bennenungscontainer jedoch durch das DataListItem-Objekt dargestellt wird, weil der Namespace für das Label-Steuerelement durch das DataListItem-Objekt definiert wird und nicht durch die Tabelle.

Verweisen auf Steuerelemente

Wenn die Seite Steuerelemente enthält, die zur Laufzeit generiert wurden (z. B. in einer Vorlage für die Steuerelemente DataList, Repeater oder GridView), kann auf diese Steuerelemente nicht mittels ihrer ID verwiesen werden, da die ID nicht eindeutig ist. Es gibt jedoch mehrere Möglichkeiten, bestimmte Steuerelemente auf der Seite zu identifizieren. Ausführliche Informationen finden Sie unter Programmgesteuertes Zugreifen auf ASP.NET-Steuerelemente.

Siehe auch

Konzepte

Auflösung von Web Forms-Steuerelement-IDs