Visão Geral do Ciclo de Vida da Página ASP.NET
Quando uma página ASP.NET é executada, a página passa por um ciclo de vida no qual ela executa uma série de etapas de processamento.Elas incluem inicialização, criação de instâncias de controles, restaurando e mantendo estado, executando os eventos da página e processando o código e renderizando os controles.É importante entender o ciclo de vida da página para que você possa escrever o código no estágio do ciclo de vida apropriado para o efeito que pretende.Além disso, se você desenvolver controles personalizados, você deve estar familiarizado com o ciclo de vida da página para inicializar corretamente os controles, preencher propriedades de controle com exibição de dados de estado e executar qualquer lógica de comportamento do controle.(O ciclo de vida de um controle é baseado no ciclo de vida da página, mas a página aumenta mais eventos para um controle que está disponível para uma única página ASP.NET.)
Etapas do Ciclo de Vida de Página Geral
Em termos gerais, a página atravessa os estágios descritos na tabela a seguir.Além disso, para os estágios do ciclo de vida da página, há estágios de aplicativo que ocorrem antes e após uma solicitação, mas não são específicas para uma página.Para obter mais informações, consulte Ciclo de Vida do Aplicativo ASP.NET uma visão geral para o IIS 5.0 e 6.0.
Estágio |
Descrição |
---|---|
Solicitação de página |
A solicitação de página ocorre antes que o ciclo de vida da página comece.Quando a página é solicitada por um usuário, ASP.NET determina se a página precisa ser analisada e compilada (portanto, começando a vida de uma página) ou se uma versão em cache da página pode ser enviada em resposta sem executar a página. |
Iniciar |
Na etapa inicial, as propriedades da página, como Request e Response são definidas.Nesse estágio, a página também determina se a solicitação é um postback ou uma nova solicitação e define a propriedade IsPostBack.Além disso, durante a etapa inicial, a propriedade UICulture da página é definida. |
Inicialização da página |
Durante a inicialização da página, os controles na página estão disponíveis e cada propriedade UniqueID do controle é definida.Os temas também são aplicados para a página.Se a solicitação atual for um postback, os dados PostBack ainda não foram carregados e valores da propriedade do controle não foram restaurados com os valores do ViewState. |
Carga |
Durante o carregamento, se a solicitação atual é um postback, as propriedades de controle serão carregadas com informações recuperadas do ViewState e do ControlState. |
Validação |
Durante a validação, o método Validate de todos os controles de validação é chamado, o que define a propriedade IsValid dos controles individuais de validação e da página. |
Tratamento de evento PostBack |
Se a solicitação for uma postback, quaisquer manipuladores de eventos são chamados. |
Renderização |
Antes da renderização, o viewstate é salvo para a página e todos os controles.Durante a fase de processamento, a página chama o método Render para cada controle, fornecendo um text writer que grava a saída de OutputStream da propriedade Response da página. |
Descarregar |
Unload é chamado quando a página tiver sido processada, enviada para o cliente e está pronta para ser descartada.Neste ponto, as propriedades de página, como Response e Request são descarregados e qualquer limpeza é executada. |
Eventos do Ciclo de Vida
Em cada etapa do ciclo de vida de uma página, a página adiciona eventos que você pode manipular para executar seu próprio código.Para eventos de controle, você vincula o manipulador de eventos ao evento, mesmo usando atributos, como onclick, ou no código.
Páginas também suportam eventos wire-up automáticos, significando que ASP.NET procura pelos métodos com nomes particulares e executa automaticamente esses métodos quando determinados eventos são chamados.Se o atributo AutoEventWireup da diretiva @ Page é definido como true (ou, se ele não for definido, desde que por padrão ele seja true), eventos de página são vinculados automaticamente a métodos que usarem a convenção de nomeação Page_event, tais como Page_Load e Page_Init.Para obter mais informações sobre evento automático wire-up, consulte Modelo de Eventos de Controle do Servidor Web ASP.NET.
A tabela a seguir lista os eventos do ciclo de vida de uma página que você usará com mais frequência.Há mais eventos que esses listados; no entanto, eles não são usados para a maioria dos cenários de transformação de página.Em vez disso, principalmente são usados pelos controles do servidor na página da Web do ASP.NET para se inicializar e processar.Se você deseja gravar seus próprios controles de servidor ASP.NET, você precisará entender mais sobre essas etapas.Para obter informações sobre como criar controles personalizados, consulte Desenvolvendo Controles Personalizados ASP.NET Server.
Evento Page |
Uso típico |
---|---|
Use este evento para o seguinte:
|
|
Gerado depois que todos os controles forem inicializados e quaisquer configurações de capa forem aplicadas.Use este evento para ler ou Inicializar propriedades de controle. |
|
Gerado pelo objeto Page.Use este evento para processar tarefas que exijam que todas as inicializações sejam concluídas. |
|
Use este evento se você precisar executar o processamento em sua página ou controle antes do evento Load. Depois que o Page gera esse evento, ele carrega o estado de exibição para si mesmo e todos os controles e, em seguida, processa quaisquer dados postback incluídos com a instância Request. |
|
O Page chama o método OnLoad do evento em Page, então, recursivamente faz o mesmo para cada controle filho, que faz o mesmo para cada um dos seus controles filhos até que a página e todos os controles sejam carregados. Use o método de evento OnLoad para definir propriedades de controles e estabelecer conexões de banco de dados. |
|
Eventos de Controle |
Use esses eventos para manipular eventos de controle específicos, como um controle Button do evento Click ou um controle TextBox do evento TextChanged. |
Use este evento para tarefas que exigem que todos os outros controles na página sejam carregado. |
|
Antes que esse evento ocorra:
O evento PreRender ocorre para cada controle na página.Use o evento para fazer alterações finais nos conteúdos da página ou seus controles. |
|
Antes que esse evento ocorra, ViewState foi salvo para a página e para todos os controles.Alterações para a página ou controles nesse momento serão ignoradas. Use este evento para executar tarefas que exijam estado de exibição a ser salvo, mas que não faça quaisquer alterações aos controles. |
|
Este é não um evento; em vez disso, nesse estágio do processamento, o objeto Page chama esse método em cada controle.Todos os controles de servidor Web do ASP.NET tem um método Render que grava a marcação do controle que é enviada ao navegador. Se você criar um controle personalizado, você normalmente substitui esse método para dar como saída a marcação do controle.No entanto, se seu controle personalizado incorpora somente controles de servidor Web do ASP.NET padrão e nenhuma marcação personalizada, você não precisa substituir o método Render.Para obter mais informações, consulte Desenvolvendo Controles Personalizados ASP.NET Server. Um controle de usuário (um arquivo .ascx) incorpora automaticamente processamento, portanto, você não precisa processar explicitamente o controle no código. |
|
Esse evento ocorre para cada controle e, em seguida, para a página.Em controles, use este evento para fazer a limpeza final para controles específicos, como fechar conexões de banco de dados de controle específico . Para a própria página, use este evento para fazer um trabalho de limpeza final, como fechar arquivos abertos e conexões de banco de dados, ou concluir log ou outras tarefas de solicitação específica.
Observação:
Durante o estágio de unload, a página e seus controles foram processados, para que você não possa fazer alterações adicionais para o fluxo de resposta.Se você tentar chamar um método, como o método Response.Write, será jogada uma exceção.
|
Considerações Adicionais Sobre o Ciclo de Vida de Página
Controles de servidor ASP.NET individual tem seu próprio ciclo de vida que é semelhante ao ciclo de vida da página.Por exemplo, um evento Init controle e Load do controle ocorrem durante os eventos da página correspondente.
Embora os dois Init e Load ocorrem recursivamente em cada controle, eles ocorrem no ordem inversa.O evento Init (e também o evento Unload) para cada controle filho ocorre antes que o evento correspondente seja gerado para seu container (de baixo para cima).No entanto, o evento Load para um container ocorre antes dos eventos Load para seus controles filho (de cima para baixo).
Você pode personalizar a aparência ou conteúdo de um controle ao manipular os eventos para o controle, como o evento Click para o controle Button e o evento SelectedIndexChanged para o controle ListBox.Em algumas circunstâncias, você também pode tratar um evento DataBinding ou DataBound do controle.Para obter mais informações, consulte os tópicos de referência de classe para controles individuais e Desenvolvendo Controles Personalizados ASP.NET Server.
Ao herdar uma classe da classe Page, além de manipular eventos gerados pela página, você pode substituir métodos da página da classe base.Por exemplo, você pode substituir o método InitializeCulture da página para definir informações de cultura dinamicamente.Observe que ao criar um manipulador de eventos usando a sintaxe Page_event, a implementação da base é implicitamente chamada e, portanto, você não precisa chamá-la em seu método.Por exemplo, o método OnLoad da classe da página base é sempre chamado, quer você crie um método Page_Load ou não.No entanto, se você substituir o método OnLoad da página com a palavra-chave override (Overrides no Visual Basic), você deve chamar o método base explicitamente.Por exemplo, se você substituir o método OnLoad na página, você deve chamar base.Load (MyBase.Load no Visual Basic) em ordem para a implementação base a ser executada.
Ajuste de Eventos para Controles Adicionados
Se os controles são criados dinamicamente em tempo de execução ou são criados declarativamente nos modelos de controles de ligação de dados, seus eventos inicialmente não são sincronizados com as de outros controles na página.Por exemplo, para um controle que é adicionado em tempo de execução, os eventos Init e Load podem ocorrer muito mais tarde no ciclo de vida da página que os mesmos eventos para controles criados declarativamente.Portanto, a partir do momento que eles são instanciados, controles adicionados dinamicamente e controles em modelos geram seus eventos um após o outro até que eles sejam detectado para o evento durante o qual ele foi adicionado à coleção Controls.
Em geral, você não precisará se preocupar com isso, a menos que você tenha aninhado controles de ligação de dados.Se um controle filho foi vinculado a dados, mas seu controle de container ainda não tenha sido vinculado a dados, os dados no controle filho e os dados no seu controle de container podem estar fora de sincronia.Isso é verdadeiro especialmente se os dados nos controle filho realizam processamento com base em um valor ligado a dados no controle de container.
Por exemplo, suponha que você tenha um GridView que exibe um registro da empresa em cada linha juntamente com uma lista dos gerentes da empresa em um controle ListBox.Para preencher a lista de gerentes, você deve vincular o controle ListBox a um controle da fonte de dados (tal como SqlDataSource) que recupera os dados do escritório daempresa usando o CompanyID em uma consulta.
Se as propriedades de ligação de dados do controle ListBox, como DataSourceID e DataMember, estiverem definidas declarativamente, o controle ListBox tentará vincular a sua fonte de dados durante o evento DataBinding de linha que contém.No entanto, o campo CompanyID da linha não contém um valor até que o evento RowDataBound do controle GridView ocorra.Nesse caso, a controle filho (o controle ListBox) é vinculado antes que o controle que contém (o controle GridView) esteja vinculado, para que seus estágios de ligação de dados fiquem fora de sincronia.
Para evitar essa condição, coloque o controle da fonte de dados para o controle ListBox no mesmo item de modelo como o controle ListBox propriamente dito e não defina as propriedades de ligação de dados de ListBox declarativamente.Em vez disso, defina-os por meio de programação em tempo de execução durante o evento RowDataBound, para que o controle ListBox não vincule seus dados até que as informações de CompanyID estejam disponíveis.
Para obter mais informações, consulte Ligação a dados usando o controle de fonte de dados.
Eventos de Vinculação de Dados para Controles de Dados Vinculados
Para ajudar você a entender a relação entre o ciclo de vida da página e os eventos de vinculação de dados, a tabela a seguir lista eventos relacionados a dados em controles ligados a dados, como os controle GridView,DetailsView e FormView.
Evento de Controle |
Uso típico |
---|---|
Esse evento é gerado pelos controles ligados a dados antes do evento PreRender do controle que contém (ou do objeto Page) e marca o início do vínculo do controle aos dados. Use este evento para abrir conexões de banco de dados manualmente, se necessário.(Os controles de fonte de dados geralmente tornam esse procedimento desnecessário.) |
|
RowCreated (Somente GridView) ou ItemCreated (controles DataList, DetailsView, SiteMapPath, DataGrid, FormView, Repeater e ListView) |
Use este evento para manipular o conteúdo que não é dependente na vinculação de dados.Por exemplo, em tempo de execução, você pode programaticamente adicionar formatação a uma linha de cabeçaljho ou rodapé em um controle GridView. |
RowDataBound (Somente GridView) ou ItemDataBound (controles DataList, SiteMapPath, DataGrid, Repeater, ListView, e ) |
Quando esse evento ocorrer, dados estão disponíveis na linha ou item, para que você possa formatar dados ou definir a propriedade FilterExpression em controles filhos de fonte de dados para exibir dados relacionados dentro do item ou da linha. |
Esse evento marca o final das operações de vinculação de dados em um controle de vinculação de dados.Em um controle GridView, a vinculação de dados é concluída para todas as linhas e quaisquer controles filhos. Use este evento para formatar o conteúdo dos dados vinculados ou iniciar vinculação de dados em outros controles que dependem dos valores de conteúdo do controle atual.(Para obter detalhes, consulte "Ajuste de Eventos para Controles Adicionados", anteriormente neste tópico.) |
Eventos de Controle de Login
O controle Login pode usar as configurações no arquivo Web.config para gerenciar autenticação de membros automaticamente.No entanto, se seu aplicativo exigir que você personalize o funcionamento do controle, ou se você deseja compreender como Login controla eventos que se relacionam ao ciclo de vida da página, você pode usar os eventos listados na tabela a seguir.
Evento de Controle |
Uso típico |
---|---|
Este evento é gerado durante uma postback, depois que o evento LoadComplete da página ocorreu.Ele marca o início do processo de login. Use este evento para tarefas que devem ocorrer antes de começar o processo de autenticação. |
|
Este evento é gerado após o evento LoggingIn. Use este evento para substituir ou aumentar o comportamento padrão de autenticação de um controle Login. |
|
Este evento é gerado depois que o nome de usuário e a senha tenham sido autenticados. Use este evento para redirecionar para outra página ou para definir dinamicamente o texto no controle.Esse evento não ocorre se houver um erro ou se a autenticação falhar. |
|
Este evento é gerado se a autenticação não tiver tido êxito. Use este evento para definir o texto no controle que explica o problema ou para direcionar o usuário a uma página diferente. |
Consulte também
Conceitos
Modelo de Eventos de Controle do Servidor Web ASP.NET
Página e contexto Application em aplicativos da Web do ASP.NET
Visão geral do estado de exibição do ASP.NET
Ligação a dados usando o controle de fonte de dados
Referência
Validando Entrada de Usuário em Páginas da Web ASP.NET
Visão Geral sobre Controles de Login ASP.NET