Compartilhar via


Identificação de Controles de Web Forms

Cada controle em uma página da Web ASP.NET deve ser exclusivamente identificável.Geralmente, você atribui um valor para uma propriedade ID do controle para identificá-lo de forma exclusiva.Esse valor se torna o nome da instância do controle — isto é, o nome pelo qual você pode referenciar o controle no código.Por exemplo, se você definir a propriedade ID de um controle TextBox para Text1, você pode referenciar o controle no código como Text1.

Um número de controles ligados a dados, incluindo os controles DataList, Repeater, GridView, FormView e DetailsView, atuam como recipientes para outros controles (filho).Quando esses controles são executados, eles geram várias instâncias do controle filho.Por exemplo, se você criar um modelo DataList com um controle Label nela, quando a página for executada, existem tantas instâncias desse controle Label na página quanto há registros no fonte de dados do controle DataList.

Observação:

Controles que usam modelos, como os controles DataList e Repeater, hospedam objetos de modelo.Por exemplo, quando o controle DataList é executado, ele cria várias instâncias da classe DataListItem.Esses objetos de modelo por sua vez contêm controles individuais como rótulos, caixas de texto, botões e assim por diante.

Como controles pode ser instanciados várias vezes na mesma página, e como você pode reutilizar nomes de controles em páginas diferentes, a estrutura de página ASP.NET fornece mecanismos para garantir que controles na página e em seu aplicativo tenham identificadores exclusivos.Também fornece a você maneiras de localizar esses controles individuais para que você possa manipulá-los em seu próprio código.

Contêiner de nomeação

Controles que podem atuar como contêineres para outros controles geram um naming container, ou um namespace de identificação, para seus controles filhos.Fornecendo neste contêiner de nomeação, controles podem garantir que atributos de identificação de seus controles filhos sejam exclusivos dentro do aplicativo inteiro.(Controles geram um contêiner de nomeação implementando a interface INamingContainer.) Quando controles filhos são criados em tempo de execução, o contêiner de nomeação é combinado com a propriedade ID do controle filho para criar o valor da propriedade UniqueID de cada controle filho.Portanto, a propriedade UniqueID se torna um identificador totalmente qualificado para um controle, referenciando seu contêiner de nomeação assim como o valor de identificação individual do controle.

No exemplo acima, são criadas dentro de contêiner de nomeação — o namespace — as várias instâncias do controle Label do controle DataList pai.A propriedade UniqueID de cada controle Label irá refletir neste namespace, que terá um formato semelhante a DataList1:_ctl:MyLabel, DataList1:_ct2:MyLabel, e assim por diante.

Observação:

Não escreva código que faça referência a controles usando o valor da propriedade UniqueID gerada.Você pode tratar a propriedade UniqueID como um manipulador (por exemplo, passando-a para um processo), mas você não deve depender que ela tenha uma estrutura específica.

Adicionalmente a cada caixa de controles fornecer um recipiente de nomeação para seus controles filhos, a página própria também oferece um contêiner de nomeação para todos os seus controles filhos.Isso cria um namespace exclusivo dentro do aplicativo para todos os controles da página.

Usando a Propriedade NamingContainer

Controles filho podem fazer referência a seus contêineres de nomeação através da propriedade NamingContainer.Essa propriedade retorna um objeto do tipo Control que você pode converter ao apropriado controle DataList, objeto DataListItem e assim por diante.

Referenciar o contêiner de nomeação é útil quando você precisa de acesso, a partir de um controle filho, a uma propriedade da caixa de controles.Por exemplo, em um manipulador para o evento DataBinding do controle filho, você pode acessar o objeto DataItem obtendo-o a partir do contêiner de nomeação.

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.

Referenciando Controls

Se sua página contém controles que são geradas em tempo de execução, como naqueles em um modelo para os controles DataList,Repeater ou GridView, você não pode diretamente referenciá-los por sua identificação, porque a ID é não exclusiva.No entanto, há várias maneiras de localizar controles individuais na página.Para obter detalhes, consulte:Acessando controles do ASP.NET Programaticamente.

Consulte também

Conceitos

Resolução de identificação de controle de Web Forms