Partilhar via


Controles de Servidor Web Dinâmicos e Estado de Exibição

Quando um controle de servidor Web é criado dinamicamente em tempo de execução, algumas informações sobre o controle são armazenadas em estado de exibição que é processado com a página.Porém, quando a página é remetida de volta para o servidor, controles não dinâmicos (aqueles que são definidos pela página) são instanciados no evento Init da página e as informações do estado de exibição são carregados antes dos controles dinâmicos poderem ser recriados (geralmente no manipulador Page_Load).Na verdade, antes dos controles dinâmicos serem recriados, o estado de exibição fica temporariamente fora de sincronia com os controles da página.Após o evento Page_Load executar, mas antes dos métodos de manipulação de eventos do controle serem chamados, as informações do estado de exibição restantes são carregados nos controles criados dinamicamente.

Na maioria das situações, esse modelo de processamento do estado de exibição funciona bem.Normalmente, você adiciona controles dinâmicos ao final de coleção de controles de um recipiente.As informações do estado de exibição armazenados para os controles dinâmicos são, portanto, informação extra no final da estrutura do estado de exibição para o recipiente apropriado, e a página pode ignorá-las até depois dos controles serem criados.

Porém, informações do estado de exibição sobre controles criados dinamicamente podem criarproblemas em dois cenários:

  • Se você inserir controles dinâmicos entre os controles existentes.

  • Se você inserir controles dinamicamente e, em seguida, reinseri-los durante um processamento, mas com valores diferentes.

Se você inserir controles dinâmicos entre controles existentes, a informação do estado de exibição do controle dinâmico é inserido na posição correspondente da estrutura do estado de exibição.Quando a página está lançada e o estado de exibição é carregado, o controle dinâmico pode não existir ainda; portanto, as informações extras no estado de exibição não corresponde ao controle correto.O resultado é normalmente uma mensagem de erro indicando uma conversão inválida.

Se você reinserir controles em cada processamento, cada geração dos controles criados dinamicamente será atendido por valores de propriedade pertencentes ao estado de exibição do conjunto de controles anterior.Em muitos casos, você pode evitar esse problema definindo a propriedade EnableViewState da caixa de controles para false.Nesse caso, nenhuma informação sobre os controles dinâmicos é salva, e não há nenhum conflito com sucessivas versões dos controles.

Para obter detalhes sobre estado de exibição, consulte

Visão Geral do Ciclo de Vida da Página ASP.NET

Visão Geral sobre o Gerenciamento de Estado do ASP.NET e ViewState.

Consulte também

Outros recursos

Adicionando Controles ASP.NET por Programação

Definindo Propriedades do Controle do Servidor ASP.NET por Programação