HOW TO:存取 Web 伺服器控制項命名空間的成員

更新:2007 年 11 月

有時,必須存取控制項命名容器的屬性或方法。例如,在資料繫結期間,命名容器使 DataItem 屬性能夠使用,其中包含控制項所繫結的資料。可依內容而定,使用不同方法存取包含控制項。

若要從資料繫結運算式存取命名容器

  • 在資料繫結運算式中使用 Container 關鍵字,就會傳回容器 (Container) 的參考。然後就能存取容器的屬性或方法。

    這個關鍵字最常用在 Eval 方法中,以便從命名容器的 DataItem 物件取得值,但也可以在這個方法以外使用。下列程式碼範例,示範了可能位於 DataListRepeaterGridView 控制項範本的 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>
    

若要從程式碼存取命名容器

請參閱

概念

Web Form 控制項識別

參考

資料繫結運算式語法

其他資源

以程式設計方式存取 ASP.NET 控制項