Поделиться через


Практическое руководство. Обращение к членам контейнера имен серверного веб-элемента управления

Обновлен: Ноябрь 2007

Иногда может возникнуть необходимость обратиться к свойствам или методам контейнера имен элемента управления. Например, при выполнении привязки данных контейнер имен позволяет обратиться к свойству DataItem, содержащему данные, к которым привязаны элементы управления. Можно обратиться к элементу управления, содержащему данные, по-разному в зависимости от контекста.

Обращение к контейнеру имен из выражения привязки данных

  • В выражении привязки данных используйте ключевое слово Container, возвращающее ссылку на контейнер. Затем можно обратиться к свойствам или методам контейнера.

    Чаще всего это ключевое слово используется в методе Eval для получения значений из объекта DataItem контейнера имен, но оно также применяется и за пределами этого метода. В следующем примере иллюстрируется использование элемента управления Label, который может находиться в шаблоне для элемента управления DataList, Repeater или GridView. Он отображает номер текущего элемента и текущий элемент данных Title контейнера имен.

    <asp:Label ID="Label1" runat="server">
    <%# Container.DataItemIndex + 1 %>. <%# Eval("Title") %>
    </asp:Label>
    
    <asp:Label ID="Label1" runat="server">
    <%# Container.DataItemIndex + 1 %>. <%# Eval("Title") %>
    </asp:Label>
    

    Далее приводится аналогичный пример, но в нем значение (элемент Author) возвращается от объекта DataItem контейнера имен:

    <asp:Label ID="Label2" runat="server" >
     <%# DataBinder.Eval(Container.DataItem, "Author") %>
    </asp:Label>
    
    <asp:Label ID="Label2" runat="server" >
     <%# DataBinder.Eval(Container.DataItem, "Author") %>
    </asp:Label>
    
    858twd77.alert_note(ru-ru,VS.90).gifПримечание.

    Свойство NamingContainer не обязательно обращается к тому же элементу управления, что и свойство Parent. Например, в элементе управления Repeater может использоваться шаблон элемента, содержащий таблицу, которая, в свою очередь, содержит элемент управления Label. Родительский элемент управления метки — это ячейка таблицы (например, объект HtmlTableCell), но ее контейнером имен является объект DataListItem, поскольку пространство имен для элемента управления Label определяет не таблица, а элемент DataListItem.

    Далее приведен полный пример, в котором описанный выше синтаксис используется для возврата значений свойств.

    <%@ 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 runat="server">
        <title>Naming Container Example</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:XmlDataSource ID="XmlDataSource1" 
                               runat="server" 
                               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" 
                          runat="server" 
                          DataSourceID="XmlDataSource1" 
                          AutoGenerateColumns="False">
                <Columns>
                    <asp:TemplateField HeaderText="Title" >
                        <ItemTemplate>
                            <asp:Label ID="Label1" runat="server">
                            <%# Container.DataItemIndex + 1 %>. <%# Eval("Title") %>
                            </asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Author">
                        <ItemTemplate>
                            <asp:Label ID="Label2" runat="server" >
                             <%# 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 runat="server">
        <title>Naming Container Example</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:XmlDataSource ID="XmlDataSource1" 
                               runat="server" 
                               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" 
                          runat="server" 
                          DataSourceID="XmlDataSource1" 
                          AutoGenerateColumns="False">
                <Columns>
                    <asp:TemplateField HeaderText="Title" >
                        <ItemTemplate>
                            <asp:Label ID="Label1" runat="server">
                            <%# Container.DataItemIndex + 1 %>. <%# Eval("Title") %>
                            </asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Author">
                        <ItemTemplate>
                            <asp:Label ID="Label2" runat="server" >
                             <%# DataBinder.Eval(Container.DataItem, "Author") %>
                            </asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </div>
        </form>
    </body>
    </html>
    

Обращение к контейнеру имен из кода

См. также

Основные понятия

Идентификация элементов управления Web Forms

Ссылки

Синтаксис выражений привязки данных

Другие ресурсы

Доступ к элементам управления ASP.NET программными средствами