Gewusst wie: Zugreifen auf Member eines Namenscontainers eines Webserversteuerelements
Aktualisiert: November 2007
Gelegentlich benötigen Sie den Zugriff auf die Eigenschaften und Methoden des Namenscontainers eines Steuerelements. So stellt beispielsweise der Namenscontainer während der Datenbindung eine DataItem-Eigenschaft zur Verfügung, die die Daten enthält, an die die Steuerelemente gebunden sind. In Abhängigkeit vom Kontext haben Sie verschiedene Möglichkeiten, auf dieses Containersteuerelement zuzugreifen.
So greifen Sie über einen Datenbindungsausdruck auf einen Namenscontainer zu
Verwenden Sie im Datenbindungsausdruck das Container-Schlüsselwort, das einen Verweis auf den Container zurückgibt. Daraufhin können Sie auf die Eigenschaften und Methoden des Containers zugreifen.
Dieses Schlüsselwort wird am häufigsten in der Eval-Methode verwendet, um Werte aus dem DataItem-Objekt des Namenscontainers abzurufen. Sie können es jedoch auch unabhängig von dieser Methode verwenden. Im folgenden Beispiel wird ein Label-Steuerelement gezeigt, das sich in einer Vorlage für ein DataList-Steuerelement, ein Repeater-Steuerelement oder ein GridView-Steuerelement befinden könnte. Die aktuelle Elementnummer wird angezeigt, gefolgt vom aktuellen Title-Datenelement des Namenscontainers.
<asp:Label ID="Label1" > <%# Container.DataItemIndex + 1 %>. <%# Eval("Title") %> </asp:Label>
<asp:Label ID="Label1" > <%# Container.DataItemIndex + 1 %>. <%# Eval("Title") %> </asp:Label>
Das folgende Beispiel ist ähnlich, allerdings wird hier ein Wert (das Author-Element) vom DataItem-Objekt des Namenscontainers abgerufen:
<asp:Label ID="Label2" > <%# DataBinder.Eval(Container.DataItem, "Author") %> </asp:Label>
<asp:Label ID="Label2" > <%# DataBinder.Eval(Container.DataItem, "Author") %> </asp:Label>
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 Namenscontainer 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.
Ein vollständiges Beispiel mit der oben dargestellten Syntax zum Abrufen der Eigenschaftenwerte wird im Folgenden dargestellt.
<%@ Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head > <title>Naming Container Example</title> </head> <body> <form id="form1" > <div> <asp:XmlDataSource ID="XmlDataSource1" XPath="Books/LanguageBooks/Book"> <Data> <Books> <LanguageBooks> <Book Title="Pure JavaScript" Author="Wyke, Gilliam, and Ting"/> <Book Title="Effective C++ Second Edition" Author="Scott Meyers"/> <Book Title="Assembly Language Step-By-Step" Author="Jeff Duntemann"/> <Book Title="Oracle PL/SQL" Author="Steven Feuerstein"/> </LanguageBooks> <SecurityBooks> <Book Title="Counter Hack" Author="Ed Skoudis"/> </SecurityBooks> </Books> </Data> </asp:XmlDataSource> <asp:GridView ID="GridView1" DataSourceID="XmlDataSource1" AutoGenerateColumns="False"> <Columns> <asp:TemplateField HeaderText="Title" > <ItemTemplate> <asp:Label ID="Label1" > <%# Container.DataItemIndex + 1 %>. <%# Eval("Title") %> </asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Author"> <ItemTemplate> <asp:Label ID="Label2" > <%# DataBinder.Eval(Container.DataItem, "Author") %> </asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> </form> </body> </html>
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head > <title>Naming Container Example</title> </head> <body> <form id="form1" > <div> <asp:XmlDataSource ID="XmlDataSource1" XPath="Books/LanguageBooks/Book"> <Data> <Books> <LanguageBooks> <Book Title="Pure JavaScript" Author="Wyke, Gilliam, and Ting"/> <Book Title="Effective C++ Second Edition" Author="Scott Meyers"/> <Book Title="Assembly Language Step-By-Step" Author="Jeff Duntemann"/> <Book Title="Oracle PL/SQL" Author="Steven Feuerstein"/> </LanguageBooks> <SecurityBooks> <Book Title="Counter Hack" Author="Ed Skoudis"/> </SecurityBooks> </Books> </Data> </asp:XmlDataSource> <asp:GridView ID="GridView1" DataSourceID="XmlDataSource1" AutoGenerateColumns="False"> <Columns> <asp:TemplateField HeaderText="Title" > <ItemTemplate> <asp:Label ID="Label1" > <%# Container.DataItemIndex + 1 %>. <%# Eval("Title") %> </asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Author"> <ItemTemplate> <asp:Label ID="Label2" > <%# DataBinder.Eval(Container.DataItem, "Author") %> </asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> </form> </body> </html>
So greifen Sie über den Code auf einen Namenscontainer zu
Rufen Sie die NamingContainer-Eigenschaft des Steuerelements ab, und wandeln Sie sie in den Klassentyp des Containers um, z. B. in GridViewRow.
Ein Beispiel finden Sie unter Verwenden der NamingContainer-Eigenschaft, um den Namenscontainer eines Steuerelements zu bestimmen.
Siehe auch
Konzepte
Steuerelementidentifikation in Web Forms
Referenz
Syntax für Datenbindungsausdrücke