Partilhar via


Como: Membros de acesso de um controle de servidor Web do contêiner de nomenclatura

Às vezes, você precisará acessar propriedades ou métodos do recipiente de nomeação de um controle.Por exemplo, durante a vinculação de dados, o recipiente de nomeação torna disponível uma propriedade DataItem que contém os dados aos quais controles são vinculados.Você pode acessar o recipiente de maneiras diferentes, dependendo do contexto.

Para acessar o recipiente de nomeação de uma expressão de vinculação de dados

  • Na expressão de vinculação de dados, use a palavra-chave Container, que retorna uma referência para o recipiente.Você pode acessar as propriedades ou métodos do recipiente.

    Esta palavra-chave é usada com mais frequência no método Eval para obter os valores a partir do objeto DataItem do contêiner de nomeação, mas pode ser usado fora do método também.O exemplo a seguir mostra um controle Label que pode estar em um modelo para um controle DataList, Repeater ou GridView.Ele exibe o número de item atual seguido pelo atual item de dados Title do contêiner de nomeação.

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

    O exemplo a seguir é semelhante, mas obtém um valor (o item Author) do objeto DataItem do recipiente de nomeação:

    <asp:Label ID="Label2"  >
     <%# DataBinder.Eval(Container.DataItem, "Author") %>
    </asp:Label>
    
    <asp:Label ID="Label2"  >
     <%# DataBinder.Eval(Container.DataItem, "Author") %>
    </asp:Label>
    
    Observação:

    A propriedade NamingContainer não necessariamente faz referência ao mesmo controle que a propriedade Parent.Por exemplo, em um controle Repeater, você pode ter um modelo de item contendo uma tabela que por sua vez contém um controle Label.O controle pai do rótulo é uma célula de tabela (por exemplo, um objeto HtmlTableCell), mas o contêiner de nomeação é o objeto DataListItem, porque ele é o DataListItem que define o namespace para o controle Label, não a tabela.

    Um exemplo completo usando a sintaxe mostrada acima para obter valores de propriedade é mostrado abaixo.

    <%@ 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>
    

Para acessar o recipiente de nomeação a partir do código

Consulte também

Conceitos

Identificação de Controles de Web Forms

Referência

Sintaxe de expressões de ligação de dados

Outros recursos

Acessando controles do ASP.NET Programaticamente