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 intancias de controles, restauração e manutenção de estado, execução os eventos da página, processamento de código e renderização de controles. É importante entender o ciclo de vida da página para que você possa escrever o código no estágio apropriado do ciclo de vida para alcançar 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.)

Em termos gerais, a página passa pelos estágios delineados na tabela a seguir.

Além das estágios do ciclo de vida da página, existem estágios da que ocorrem antes e depois de uma requisição, masnão são específicas deuma página.
Para 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

Requisição da página

A requisição da página ocorre antes do ciclo de vida da página começar. Quando a página é requisitada por um usuário, o ASP.NET determina se a página precisa ser analisada e compilada (portanto, começando o ciclo de 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.

START

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 requisição é um postback ou uma nova requisiçã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 de página, os controles da mesma estão disponíveis e é definida a propriedade UniqueID de cada um deles.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.

LOAD

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 são chamados, este define a propriedade IsValid de cada um dos controles validadores da página.

Manipulação 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 renderização, a página chamará o método Render para cada controle, fornecendo um escritor de texto que grava a saída para o  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 da página, como Response e Request são descarregados e toda limpeza será executada.

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ê associa o manipulador de eventos ao evento, ou explicitamente 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 verdadeiro (ou se ele não estiver definido, por padrão ele é verdadeiro), os eventos da página automaticamente são associados aos métodos que usam a convenção de nomenclatura de Page_Event, como Page_Load e Page_Init. Para mais informações sobre o 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 página que você usará com mais freqüê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, eles são usados ​​principalmente pelos controles de servidor na página Web ASP.NET para inicializar e renderizar.
Se você deseja gravar seus próprios controles de servidor ASP.NET, você precisará entender mais sobre essas etapas. Para mais informações sobre a criação de controles personalizados, consulte Desenvolvendo Controles Personalizados ASP.NET Server.

Evento Page

Uso típico

PreInit

Use este evento para o seguinte:

  • Verifique o a propriedade IsPostBack para determinar se é a primeira vez que a página está sendo carregada.

  • Criar ou recriar controles dinâmicos.

  • Defina uma página mestra dinamicamente.

  • Defina a propriedade Theme dinamicamente.

  • Ler ou definir valores de propriedades de perfil.

    ObservaçãoObservação:
    Se a solicitação for um postback, os valores dos controles ainda não foram restaurados do view state.
    Se você definir uma propriedade de controle nesta fase, o seu valor pode ser sobrescrito no próximo evento.

Init

Gerado depois de todos os controles foram inicializados e as configurações do skin foram aplicados.
Use este evento para ler ou inicializar as propriedades do 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 controles

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çãoObservação:
Em uma requisição postback, se a página contém controles de validação, verifique a propriedade IsValid da 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 carregados.

PreRender

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.

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 avento; em vez disso, nesta fase de 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ê cria um controle personalizado, você normalmente substitui esse método para produzir controles de marcação.
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 user control (um arquivo ascx.) incorpora automaticamente processamento, de modo que você não precisa renderizar explicitamente o controle no código.

Unload

Esse evento ocorre para cada controle e, em seguida, para a página. Nos controles, use esse evento para fazer a limpeza final para controles específicos, como fechar conexões de banco de dados específicos de controle.

Para a própria página, use este evento para fazer o trabalho de limpeza final, como fechar arquivos abertos e conexões de banco de dados, ou finalizar login ou outras tarefas específicas da requisição.

ObservaçãoObservação:
Durante a fase de unload, a página e seus controles foram processados​​, então você não pode fazer outras alterações no fluxo de resposta.
Se você tentar chamar um método como o método Response.Write, a página irá lançar uma exceção.

Controles de servidor ASP.NET individuais têm seu próprio ciclo de vida, que é semelhante ao ciclo de vida da página.
Por exemplo, os eventos Init e Load de um controle ocorrem durante o processamento da página correspondente.

Embora ambos Init e Load ocorram recursivamente em cada controle, eles acontecem em ordem inversa. O evento Init (e também o evento Unload) para cada controle filhoe ocorrem antes do evento correspondente e é gerado para seu container (bottom-up). No entanto, o evento Load para um container ocorre antes do evento Load dos controles filho (top-down).

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 as 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 base da página é sempre chamado, se você criar um evento Page_Load ou não. No entanto,se você sobrescrever o método OnLoad com a palavra-chave override (Overrides em Visual Basic), você deve explicitamente chamar o método base. Por exemplo, se você sobrescrever o método OnLoad da página, você deve chamar base.Load (MyBase.Load em Visual Basic) para que a implementação base seja 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 é acionado 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 de 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 o seu controle de contêiner ainda não foi vinculado a dados, os dados do controle filho e os dados em seu controle recipiente pode estar fora de sincronia.
Isto é verdade especialmente se os dados no controle filho executam o processamento com base em um valor de vinculação de dados no controle do recipiente.

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 vinculação de dados do controle ListBox, como DataSourceID e DataMember, são definidas declarativamente, o controle ListBox vai tentar vincular a sua fonte de dados durante o evento DataBinding da linha que o contém. No entanto, o campo CompanyID da linha não contém um valor até que do controle GridView ocorra o evento RowDataBound. 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.

Para ajudar você a entender a relação entre o clico de vida da página e os eventos vinculados a dados, a tabela a seguir lista os eventos relacionados a dados em controles vinculados a dados, como o 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 de vinculação de dados.
Por exemplo, em tempo de execução, você pode programaticamente adicionar formatação a uma linha de cabeçalho ou rodapé de um controle GridView.

RowDataBound (GridView apenas) ou ItemDataBound (Controles DataList, SiteMapPath, DataGrid, Repeater, e ListView)

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 , vinculação de dados é completa para todas as linhas e controles filho.

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.)

O controle Login pode usar configurações no arquivo Web.config para gerenciar a autenticação automaticamente. No entanto, se seu aplicativo requer que você personalize como funciona o controle, ou se você quer entender como os eventos do controle Login se relacionam com o clico 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 do início do processo de autenticação.

Authenticate

Este evento é gerado após o evento LoggingIn.

Use este evento para sobrescrever ou melhorar o comportamento de autenticação padrão do 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.
Este 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 para uma página diferente.

Contribuições da comunidade

ADICIONAR
Mostrar: