Visão geral do ciclo de vida da página ASP.NET

http://msdn.microsoft.com/en-us/library/ms178472(v=vs.100).aspx

Visão geral do ciclo de vida da página ASP.NET
.NET Framework 4 Outras versões 205 de 280 avaliaram isso útil – Avalie este tópico
Atualizado em: maio de 2011

Quando uma página ASP.NET é executada, a página passa por um ciclo de vida no qual executa uma série de etapas de processamento. Isso inclui inicialização, instanciar controles, restaurar e manter o estado, executar o código do manipulador de eventos e renderizar. É importante que você compreenda o ciclo de vida da página para que possa escrever o código no estágio de ciclo de vida apropriado para o efeito desejado.

Se você desenvolver controles personalizados, deverá estar familiarizado com o ciclo de vida da página para inicializar os controles corretamente, preencher as propriedades do controle com dados do estado de exibição e executar o código de comportamento do controle. O ciclo de vida de um controle é baseado no ciclo de vida da página, e a página gera muitos dos eventos que você precisa tratar em um controle personalizado.

Este tópico contém as seguintes seções:

Estágios do ciclo de vida da página geral

Eventos do ciclo de vida

Considerações adicionais sobre o ciclo de vida da página

Eventos de catch-up para controles adicionados

Eventos de vinculação de dados para controles vinculados a dados

Eventos de controle de login

Estágios
gerais do ciclo de vida da página Em termos gerais, a página passa pelos estágios descritos na tabela a seguir. Além dos estágios do ciclo de vida da página, há estágios do aplicativo que ocorrem antes e depois de uma solicitação, mas não são específicos para uma página. Para obter mais informações, consulte Introdução ao ciclo de vida do aplicativo ASP.NET e Visão geral do ciclo de vida do aplicativo ASP.NET para IIS 7.0.

Algumas partes do ciclo de vida ocorrem apenas quando uma página é processada como um postback. Para postbacks, o ciclo de vida da página é o mesmo durante um postback de página parcial (como quando você usa um controle UpdatePanel) e durante um postback de página inteira.

Etapa

Descrição

Solicitação de
página A solicitação de página ocorre antes do início do ciclo de vida da página. Quando a página é solicitada por um usuário, o ASP.NET determina se a página precisa ser analisada e compilada (portanto, iniciando 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
No estágio inicial, as propriedades da página, como Solicitação e Resposta, 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. A página também define a propriedade UICulture.
Inicialização
Durante a inicialização da página, os controles da página estão disponíveis e a propriedade UniqueID de cada controle é definida. Uma página mestra e temas também são aplicados à página, se aplicável. Se a solicitação atual for um postback, os dados de postback ainda não foram carregados e os valores da propriedade de controle não foram restaurados para os valores do estado de exibição.
Carregar
Durante o carregamento, se a solicitação atual for um postback, as propriedades de controle são carregadas com as informações recuperadas do estado de exibição e do estado de controle.
Tratamento de eventos de postback
Se a solicitação for um postback, os manipuladores de eventos de controle serão chamados. Depois disso, o método Validate de todos os controles do validador é chamado, o que define a propriedade IsValid dos controles do validador individuais e da página. (Há uma exceção a esta sequência: o manipulador do evento que causou a validação é chamado após a validação.)
Renderização
Antes da renderização, o estado de exibição é salvo para a página e todos os controles. Durante o estágio de renderização, a página chama o método Render para cada controle, fornecendo um escritor de texto que grava sua saída no objeto OutputStream da propriedade Response da página.
Descarregar
O evento Unload é gerado depois que a página foi totalmente renderizada, enviada ao cliente e está pronta para ser descartada. Nesse ponto, as propriedades da página, como Resposta e Solicitação, são descarregadas e a limpeza é realizada.
Eventos de ciclo de vida
Em cada estágio do ciclo de vida de uma página, a página gera eventos que você pode manipular para executar seu próprio código. Para eventos de controle, você vincula o manipulador de eventos ao evento, declarativamente usando atributos como onclick ou em código.

As páginas também oferecem suporte à conexão automática de eventos, o que significa que o ASP.NET procura métodos com nomes específicos e os executa automaticamente quando determinados eventos são gerados. Se o atributo AutoEventWireup da diretiva @ Page for definido como true, os eventos de página são automaticamente associados a métodos que usam a convenção de nomenclatura do evento de página , como Page Load e Page_Init. Para obter mais informações sobre a conexão automática de eventos, consulte ASP.NET Web Server Control Event Model.

A tabela a seguir lista os eventos de ciclo de vida da página que você usará com mais frequência. Existem mais eventos do que os listados; no entanto, eles não são usados ​​para a maioria dos cenários de processamento de página. Em vez disso, eles são usados ​​principalmente por controles de servidor na página da Web ASP.NET para inicializar e renderizar a si mesmos. Se você deseja escrever controles de servidor ASP.NET personalizados, você precisa entender mais sobre esses eventos. Para obter informações sobre como criar controles personalizados, consulte Developing Custom ASP.NET Server Controls.

Evento de página

Uso Típico

PreInit
Gerado após a conclusão do estágio inicial e antes do início do estágio de inicialização.
Use este evento para o seguinte:
Verifique a propriedade IsPostBack para determinar se esta é a primeira vez que a página está sendo processada. As propriedades IsCallback e IsCrossPagePostBack também foram definidas neste momento.
Crie ou recrie controles dinâmicos.
Defina uma página mestra dinamicamente.
Defina a propriedade Theme dinamicamente.
Leia ou defina os valores das propriedades do perfil.
Observação Se a solicitação for um postback, os valores dos controles ainda não foram restaurados do estado de exibição. Se você definir uma propriedade de controle neste estágio, seu valor poderá ser substituído no próximo evento.
Iniciar
Gerado depois que todos os controles foram inicializados e todas as configurações de skin foram aplicadas. O evento Init de controles individuais ocorre antes do evento Init da página.
Use este evento para ler ou inicializar propriedades de controle.
InitComplete
Gerado no final do estágio de inicialização da página. Apenas uma operação ocorre entre os eventos Init e InitComplete: o rastreamento das alterações do estado de exibição é ativado. O rastreamento do estado de exibição permite que os controles persistam em quaisquer valores que são adicionados programaticamente à coleção ViewState. Até que o rastreamento do estado de exibição seja ativado, todos os valores adicionados ao estado de exibição são perdidos nos postbacks. Os controles normalmente ativam o rastreamento do estado de exibição imediatamente após dispararem seu evento de inicialização.
Use este evento para fazer alterações no estado de exibição que você deseja garantir que sejam persistentes após o próximo postback.
PreLoad
Gerado depois que a página carrega o estado de exibição para si mesma e todos os controles, e depois que ela processa os dados de postback que estão incluídos na instância Request.
Load
O objeto Page chama o método OnLoad no objeto Page e, em seguida, faz o mesmo recursivamente para cada controle filho até que a página e todos os controles sejam carregados. O evento Load de controles individuais ocorre após o evento Load da página.
Use o método de evento OnLoad para definir propriedades em controles e estabelecer conexões de banco de dados.
Eventos de controle
Use esses eventos para manipular eventos de controle específicos, como um evento Click do controle Button ou um evento TextChanged do controle TextBox.
Observação Em uma solicitação de postback, se a página contiver controles de validador, verifique a propriedade IsValid da Página e dos controles de validação individuais antes de executar qualquer processamento.
LoadComplete
Gerado no final do estágio de manipulação de eventos.
Use este evento para tarefas que requerem que todos os outros controles na página sejam carregados.
PreRender
Gerado depois que o objeto Page criou todos os controles necessários para processar a página, incluindo controles filho de controles compostos. (Para fazer isso, o objeto Page chama o VerifyChildControls para cada controle e para a página.)
O objeto Page gera o evento PreRender no objeto Page e, em seguida, faz o mesmo recursivamente para cada controle filho. O evento PreRender de controles individuais ocorre após o evento PreRender da página.
Use o evento para fazer alterações finais no conteúdo da página ou em seus controles antes do início do estágio de renderização.
PreRenderComplete
Gerado depois que cada controle vinculado a dados cuja propriedade DataSourceID é definida chama seu método DataBind. Para obter mais informações, consulte Eventos de vinculação de dados para controles vinculados a dados, posteriormente neste tópico.
SaveStateComplete
Gerado depois que o estado de exibição e o estado de controle foram salvos para a página e todos os controles. Quaisquer alterações na página ou controles neste ponto afetam a renderização, mas as alterações não serão recuperadas no próximo postback.
Renderizar
Este não é um evento; em vez disso, neste estágio de processamento, o objeto Page chama esse método em cada controle. Todos os controles de servidor Web ASP.NET têm um método Render que grava a marcação do controle para enviar ao navegador.
Se você criar um controle personalizado, normalmente substituirá esse método para gerar a marcação do controle. No entanto, se o seu controle personalizado incorporar apenas controles de servidor Web ASP.NET padrão e nenhuma marcação personalizada, você não precisará substituir o método Render. Para obter mais informações, consulte Developing Custom ASP.NET Server Controls.
Um controle de usuário (um arquivo .ascx) incorpora automaticamente a renderização, então você não precisa renderizar explicitamente o controle no código.
Descarregar
gerado para cada controle e, em seguida, para a página.
Em controles, use este evento para fazer a limpeza final de controles específicos, como fechar conexões de banco de dados específicas de controle.
Para a página em si, use este evento para fazer o trabalho de limpeza final, como fechar arquivos abertos e conexões de banco de dados ou finalizar o registro ou outras tarefas específicas de solicitação.
Nota Durante o estágio de descarregamento, a página e seus controles foram renderizados, portanto, você não pode fazer mais alterações no fluxo de resposta. Se você tentar chamar um método como o método Response.Write, a página lançará uma exceção.
Considerações adicionais sobre o ciclo de vida da página
Os 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 os eventos da página correspondente.

Embora tanto Init quanto Load ocorram recursivamente em cada controle, eles acontecem na 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 contêiner (de baixo para cima). No entanto, o evento Load para um contêiner ocorre antes dos eventos Load para seus controles filhos (de cima para baixo). As páginas mestras se comportam como controles filhos em uma página: o evento Init da página mestra ocorre antes dos eventos Init e Load da página, e o evento Load da página mestra ocorre após os eventos Init e Load da página.

Quando você cria uma classe que herda da classe Page, além de manipular eventos gerados pela página, você pode substituir métodos da classe base da página. Por exemplo, você pode substituir o método InitializeCulture da página para definir dinamicamente as informações de cultura. Observe que quando um manipulador de eventos é criado usando a sintaxe de evento Page , a implementação básica é implicitamente chamada e, portanto, você não precisa chamá-la em seu método. Por exemplo, o método OnLoad da classe de página base é sempre chamado, se você criar um PageMétodo de carregamento ou não. No entanto, se você substituir o método OnLoad da página com a palavra-chave override (Overrides no Visual Basic), deverá chamar explicitamente o método base. Por exemplo, se você substituir o método OnLoad na página, deverá chamar base.Load (MyBase.Load em Visual Basic) para que a implementação básica seja executada.

A ilustração a seguir mostra alguns dos métodos mais importantes da classe Page que você pode substituir para adicionar código que é executado em pontos específicos no ciclo de vida da página. (Para obter uma lista completa de métodos e eventos de página, consulte a classe Page.) A ilustração também mostra como esses métodos se relacionam a eventos de página e a eventos de controle. A sequência de métodos e eventos na ilustração é de cima para baixo e dentro de cada linha da esquerda para a direita.

Eventos de catch-up para controles adicionados
Se os controles forem criados dinamicamente em tempo de execução ou declarativamente dentro de modelos de controles vinculados a dados, seus eventos inicialmente não serão sincronizados com os 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 do que os mesmos eventos para controles criados declarativamente. Portanto, a partir do momento em que são instanciados, controles adicionados dinamicamente e controles em modelos aumentam seus eventos um após o outro até que tenham alcançado o evento durante o qual ele foi adicionado à coleção Controls.

Eventos de vinculação de dados para controles vinculados a dados
Para ajudá-lo 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 vinculados a dados, como os controles GridView, DetailsView e FormView.

Evento de controle

Uso Típico

DataBinding
Gerado após o evento PreRender do controle, que ocorre após o evento PreRender da página. (Isso se aplica a controles cuja propriedade DataSourceID é definida declarativamente. Caso contrário, o evento acontece quando você chama o método DataBind do controle.)
Este evento marca o início do processo que vincula o controle aos dados. Use este evento para abrir conexões de banco de dados manualmente, se necessário, e para definir valores de parâmetro dinamicamente antes de uma consulta ser executada.
RowCreated (somente GridView) ou ItemCreated (controles DataList, DetailsView, SiteMapPath, DataGrid, FormView, Repeater e ListView)
Gerado após o evento DataBinding do controle.
Use este evento para manipular o conteúdo que não depende da vinculação de dados. Por exemplo, em tempo de execução, você pode adicionar formatação programaticamente a uma linha de cabeçalho ou rodapé em um controle GridView.
RowDataBound (somente GridView) ou ItemDataBound (controles DataList, SiteMapPath, DataGrid, Repetidora e ListView)
Gerado após o evento RowCreated ou ItemCreated do controle.
Quando esse evento ocorre, os dados ficam disponíveis na linha ou item, portanto, você pode formatar os dados ou definir a propriedade FilterExpression nos controles da fonte de dados filho para exibir os dados relacionados na linha ou item.
DataBound
Gerado no final das operações de vinculação de dados em um controle vinculado a dados. Em um controle GridView, a vinculação de dados é completa para todas as linhas e qualquer controle filho.
Use este evento para formatar o conteúdo vinculado a dados ou para iniciar a vinculação de dados em outros controles que dependem de valores do conteúdo do controle atual. (Para obter mais informações, consulte Eventos de atualização para controles adicionados anteriormente neste tópico.)
Controles vinculados a dados aninhados

Se um controle filho tiver sido vinculado a dados, mas seu controle de contêiner ainda não tiver sido, os dados no controle filho e os dados em seu controle de contêiner podem estar fora de sincronia. Isso é verdadeiro principalmente se os dados no controle filho executarem o processamento com base em um valor vinculado a dados no controle do contêiner.

Por exemplo, suponha que você tenha um controle GridView que exibe um registro da empresa em cada linha e exibe uma lista dos executivos da empresa em um controle ListBox. Para preencher a lista de dirigentes, você vincularia o controle ListBox a um controle de fonte de dados (como SqlDataSource) que recupera os dados do dirigente da empresa usando o ID da empresa em uma consulta.

Se as propriedades de vinculação de dados do controle ListBox, como DataSourceID e DataMember, forem definidas declarativamente, o controle ListBox tentará se vincular à 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 ocorra o evento RowDataBound do controle GridView. Nesse caso, o controle filho (o controle ListBox) é vinculado antes do controle de conteúdo (o controle GridView) ser vinculado, portanto, seus estágios de vinculação de dados estão fora de sincronia.

Para evitar essa condição, coloque o controle de fonte de dados para o controle ListBox no mesmo item de modelo que o próprio controle ListBox e não defina as propriedades de vinculação de dados do ListBox declarativamente. Em vez disso, defina-os programaticamente em tempo de execução durante o evento RowDataBound, para que o controle ListBox não se vincule a seus dados até que as informações CompanyID estejam disponíveis.

Para obter mais informações, consulte Vinculando a dados usando um controle de fonte de dados.

Eventos de
controle de login O controle de login pode usar configurações no arquivo Web.config para gerenciar a autenticação de associação automaticamente. No entanto, se o seu aplicativo requer que você personalize como o controle funciona, ou se você deseja entender como os eventos de controle de Login 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
Gerado durante um postback, após o evento LoadComplete da página ter ocorrido. Este evento marca o início do processo de login.
Use este evento para tarefas que devem ocorrer antes de iniciar o processo de autenticação.
Authenticate
Gerado após o evento LoggingIn.
Use este evento para substituir ou aprimorar o comportamento de autenticação padrão de um controle de Login.
LoggedIn
Gerado após o nome de usuário e a senha serem 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
Gerado se a autenticação não foi bem-sucedida.
Use este evento para definir o texto no controle que explica o problema ou para direcionar o usuário para uma página diferente.