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

PreInit

Use este evento para o seguinte:

  • Verifique a propriedade IsPostBack para determinar se esta é a primeira vez a página está sendo processada.

  • Crie ou recrie controles dinâmicos.

  • Defina uma página mestra dinamicamente.

  • Defina a propriedade Theme dinamicamente.

  • Leia ou defina valores de propriedades de perfil.

    Observação:
    Se a solicitação for uma nova postagem, os valores de controles ainda não terão sido restaurados do estado de exibição.Se você definir uma propriedade de controle nesta etapa, seu valor pode ser sobrescrito no próximo estágio.

Init

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.

InitComplete

Gerado pelo objeto Page.Use este evento para processar tarefas que exijam que todas as inicializações sejam concluídas.

PreLoad

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.

Load

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.

Observação:
Em uma solicitação postback, se a página contém controles de validação, verifique a propriedade IsValiddo Page e dos controles de validação individuais antes de executar qualquer processamento.

LoadComplete

Use este evento para tarefas que exigem que todos os outros controles na página sejam carregado.

PreRender

Antes que esse evento ocorra:

  • As chamadas EnsureChildControls do objeto Page para cada controle e para a página.

  • Cada controle de ligação de dados cuja propriedade DataSourceID está definida chama o método DataBind.Para obter mais informações, consulte Data Binding Events for Data-Bound Controls posteriormente contidas neste tópico.

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.

SaveStateComplete

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.

Render

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.

Unload

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

DataBinding

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.

DataBound

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

LoggingIn

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.

Authenticate

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.

LoggedIn

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.

LoginError

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

Outros recursos

Desenvolvendo Controles Personalizados ASP.NET Server

Sintaxe da página ASP.NET

Tratamento de Evento de servidor em páginas da Web ASP.NET