HOW TO:存取 Web 伺服器控制項命名空間的成員
更新:2007 年 11 月
有時,必須存取控制項命名容器的屬性或方法。例如,在資料繫結期間,命名容器使 DataItem 屬性能夠使用,其中包含控制項所繫結的資料。可依內容而定,使用不同方法存取包含控制項。
若要從資料繫結運算式存取命名容器
在資料繫結運算式中使用 Container 關鍵字,就會傳回容器 (Container) 的參考。然後就能存取容器的屬性或方法。
這個關鍵字最常用在 Eval 方法中,以便從命名容器的 DataItem 物件取得值,但也可以在這個方法以外使用。下列程式碼範例,示範了可能位於 DataList、Repeater 或 GridView 控制項範本的 Label 控制項。這個控制項會顯示目前項目編號,其後面接著命名容器的目前 Title 資料項目。
<asp:Label ID="Label1" > <%# Container.DataItemIndex + 1 %>. <%# Eval("Title") %> </asp:Label>
<asp:Label ID="Label1" > <%# Container.DataItemIndex + 1 %>. <%# Eval("Title") %> </asp:Label>
下列程式碼範例也大致相同,但會從命名容器的 DataItem 物件取得值 (Author 項目):
<asp:Label ID="Label2" > <%# DataBinder.Eval(Container.DataItem, "Author") %> </asp:Label>
<asp:Label ID="Label2" > <%# DataBinder.Eval(Container.DataItem, "Author") %> </asp:Label>
注意事項:
NamingContainer 屬性不一定要與 Parent 屬性參考相同的控制項。例如,在 Repeater 控制項中,您可能會有包含資料表的項目範本,而資料表中又包含 Label 控制項。標記 (Label) 的父控制項是表格儲存格 (例如,HtmlTableCell 物件),但它的命名容器為 DataListItem 物件,因為是 DataListItem 定義 Label 控制項的命名空間,而不是資料表。
下列是使用上述語法取得屬性值的完整範例。
<%@ 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>
若要從程式碼存取命名容器
取得控制項的 NamingContainer 屬性,將其轉換成容器的類別 (Class) 型別,例如 GridViewRow。
如需範例,請參閱使用 NamingContainer 屬性決定控制項的命名容器。