Compartilhar via


Eventos de ciclo de vida de cliente AJAX

Um página ASP.NET AJAX-Enabled gera os mesmos eventos de ciclo de vida do servidor como um página da Web ASP.NET 2.0 e além disso gera eventos do ciclo de vida do cliente.Os eventos de cliente permitem que você personalize a interface do usuário para tanto postbacks quanto para postbacks assíncronos (atualizações de página parcial).Os eventos do cliente também ajudam a gerenciar componentes de script personalizados durante o ciclo de vida da página no navegador.

Os eventos do cliente são gerados pelas classes na caixa Microsoft AJAX Library.Essas classes são instanciadas automaticamente quando uma página contém controles de servidor ASP.NET Ajax.As classes de cliente fornecem APIs que permitem que você vincule a eventos e forneça manipuladores para esses eventos.Devido ao Microsoft AJAX Library ser navegador independente, o código que você escreve para seus manipuladores funciona da mesma maneira em todos os navegadores com suporte.

O evento de chave para solicitações iniciais (solicitações GET) e postbacks síncronas é o evento Load da instância Application.Quando um script em um manipulador de eventos load executa, todos os scripts e componentes foram carregados e estão disponíveis.Quando a renderização parcial da página com controles UpdatePanel é ativada, os eventos chaves do cliente são os eventos da classe PageRequestManager.Esses eventos permitem que você manipule vários cenários comuns.Esses incluem a capacidade para cancelar postbacks, para dar prioridade a um postback em lugar de outro e animar controles UpdatePanel quando o seu conteúdo é atualizado.

Eventos de cliente são úteis se você estiver criando páginas ou componentes de escrita.Se você for um desenvolvedor de página, você pode fornecer um script personalizado que é chamado quando a página carrega e descarrega no navegador.

Para obter mais informações sobre os eventos do ciclo de vida do servidor, consulte Visão Geral do Ciclo de Vida da Página ASP.NET.

Classes de cliente

As duas principais classes Microsoft AJAX Library que geram eventos durante o ciclo de vida de cliente de uma página da Web ASP.NET AJAX são as classes Application e PageRequestManager.

A classe Application é instanciada no navegador quando a página contém um controle ScriptManager.A classe Application parece com o controle de servidor Page, que é derivada da classe Control, mas fornece funcionalidade adicional para lançar eventos do servidor.Da mesma forma, a classe Application é derivada da classe S ys.Component,mas gera eventos de ciclo de vida do cliente que você pode manipular.

Se uma página contiver um controle ScriptManager e um ou mais controles UpdatePanel, a página pode executar atualizações de página parcial (se renderização parcial da página está ativada e tem suporte no navegador).Nesse caso, uma instância da classe PageRequestManager está disponível no navegador automaticamente.A classe PageRequestManager gera eventos do cliente que são específicos para posbacks assíncronos.Para obter detalhes sobre renderização parcial da página, consulte Visão geral de renderização de página parcial.

Adicionar Manipuladores de Eventos de cliente

Para adicionar ou remover os manipuladores de eventos gerados pelas classes Application e PageRequestManager, use os métodos add_EventName e remove_EventName dessas classes.O exemplo a seguir mostra como adicionar um manipulador chamado MyLoad para o evento do objeto initApplication.

Sys.Application.add_init(MyInit);
function MyInit(sender) {
}
Sys.Appplication.remove_init(MyInit);
Sys.Application.add_init(MyInit);
function MyInit(sender) {
}
Sys.Appplication.remove_init(MyInit);
Observação:

Este exemplo mostra apenas a sintaxe dos métodos add_EventName e remove_EventName.Detalhes sobre o que você pode fazer com eventos específicos são fornecidos posteriormente neste tópico.

Tratamento de Eventos de Carregamento e Descarregamento do Aplicativo

Para tratar eventos load e unload de objetos Application, não é necessário ligar explicitamente um manipulador ao eventos.Em vez disso, você pode criar funções que usam os nomes reservados pageLoad e pageUnload.O exemplo a seguir mostra como adicionar um manipulador para o evento load do objeto Application usando essa abordagem.

function pageLoad(sender, args) {
}
function pageLoad(sender, args) {
}

Eventos para outras classes de cliente

Este tópico descreve somente os eventos que são criados pelas classes Application e PageRequestManager.O Microsoft AJAX Library também contém classes para adicionar, limpar e remover manipuladores de eventos DOM.Essas classes incluem o seguinte:

Eventos gerados por elementos DOM não serão abordados neste tópico.

Eventos de Cliente do Aplicativo e Classes PageRequestManager

A tabela a seguir lista os eventos do cliente das classes Application e PageRequestManager que você pode manipular em páginas ASP.NET AJAX-ativado.A ordem na qual os eventos são gerados é descrita posteriormente neste tópico.

Evento

Descrição

Evento Sys.Aplicativo.Init

Lançado após todos os scripts serem carregados, mas antes de todos os objetos serem criados.Se você estiver escrevendo um componente, o evento init oferece um ponto no ciclo de vida para adicionar seu componente à página.O componente, em seguida, pode ser usado por outros componentes ou pelo script mais tarde no ciclo de vida da página.Se você for um desenvolvedor de página, você deve usar o evento load em vez do evento init para a maioria dos cenários.

O evento init é gerado apenas uma vez quando a página é primeiro processada.Atualizações subsequentes de página parcial não lançam o evento init.

Evento Sys.Aplicativo.Carregar

Lançado após todos os scripts terem sido carregados e quando todos os objetos no aplicativo que foram criados usando $CREATE foram inicializados.O evento load é gerado para todas os postbacks para o servidor, que inclui postbacks assíncronos.

Se você for um desenvolvedor de página, você pode criar uma função que tem o nome pageLoad, que fornece automaticamente um manipulador para o evento load.O manipulador pageLoad é chamado após qualquer manipulador ter sido adicionado ao evento load pelo método add_load.

O evento load aceita um parâmetro eventargs, que é um objeto Sys.ApplicationLoadEventArgs.Você pode utilizar os argumentos de eventos para determinar se a página está sendo atualizada como resultado de uma atualização de página parcial e quais componentes foram criados desde o evento anterior load ter sido gerado.

Evento Sys.Aplicativo.Unload

Gerado antes de todos os objetos serem descartados e antes da janela do navegador window.unload aparecer.

Se você for um desenvolvedor de página, você pode criar uma função que tem o nome pageUnload, que fornece automaticamente um manipulador para o evento unload.O evento pageUnload é chamado logo antes da página ser descarregada a partir do navegador.Durante este evento, você deve liberar quaisquer recursos que está segurando seu código.

Evento Sys.componente.propertyChanged

Potencialmente gerado quando uma propriedade de um componente for alterada.Este evento é gerado apenas se um desenvolvedor de componente chamou o método Sys.Component.raisePropertyChange em um assessor de configuração de propriedade.Para obter mais informações, consulte Definindo Propriedades de Componente Personalizadas e Disparando Eventos PropertyChanged.

O evento propertyChanged aceita um parâmetro eventargs, que é um objeto Sys.ApplicationLoadEventArgs.

Evento Sys.componente.disposing

Gerado quando a instância Application é descartada.

Sys.WebForms.PageRequestManager initializeRequest eventos

Gerado antes de iniciar uma solicitação assíncrona.Você pode usar esse evento para cancelar um postback, como para dar prioridade a outro postback assíncrono.

O evento initializeRequest aceita um parâmetro eventargs, que é um objeto Sys.WebForms.InitializeRequestEventArgs.Esse objeto torna disponível o elemento que causou o postback e o objeto de solicitação subjacente.InitializeRequestEventArgs também expõe um Cancelarpropriedade .Se você definir cancel para true, o novo postback será cancelado.

Sys.WebForms.PageRequestManager beginRequest eventos

Gerado antes de uma postback assíncrono iniciar e o postback ser enviado ao servidor.Se houver um postback já em processamento, ele é parado (usando o método abortPostBack).Você pode usar esse evento para definir cabeçalhos de solicitação ou para iniciar uma animação na página para indicar que a solicitação está no processo.

O evento beginRequest aceita um parâmetro eventargs, que é um objeto Sys.WebForms.InitializeRequestEventArgs.Esse objeto torna disponível o elemento que causou o postback e o objeto de solicitação subjacente.

Sys.WebForms.PageRequestManager pageLoading eventos

Gerado após a resposta do servidor para um postback assíncrono ser recebida, mas antes de qualquer conteúdo na página ser atualizado.Você pode usar esse evento para fornecer um efeito de transição personalizada para conteúdo atualizado.

O evento pageLoading aceita um parâmetro eventargs, que é um objeto Sys.WebForms.InitializeRequestEventArgs.Esse objeto torna informações disponíveis sobre quais painéis serão excluídos e atualizados como um resultado do postback assíncrono mais recente.

PageLoaded Sys.WebForms.PageRequestManager eventos

Gerado após todo o conteúdo na página ser atualizado, como resultado de um síncrono ou assícrono postback.Para postagens síncronas, painéis só podem ser criados, mas para postagens assíncronas, painéis podem ser tanto criados como atualizados.Você pode usar esse evento para fornecer um efeito de transição personalizada para conteúdo atualizado.

O evento pageLoaded aceita um parâmetro eventargs, que é um objeto Sys.WebForms.InitializeRequestEventArgs.Esse objeto torna disponíveis informações adicionais sobre quais painéis foram atualizados e criados no postback mais recente.

Sys.WebForms.PageRequestManager endRequest eventos

Gerado após a resposta para um postback assíncrono ser processado e a página ser atualizada, ou durante o processamento da resposta se houver um erro.Se ocorrer um erro, a página não será atualizada.Use este evento para fornecer a notificação de erro personalizada para os usuários ou para registrar erros.

O evento endRequest aceita um parâmetro eventargs, que é um objeto Sys.WebForms.InitializeRequestEventArgs.Esse objeto torna informações disponíveis sobre os erros que ocorreram e se o erro foi tratado.Ele também torna disponível o objeto de resposta.

Exemplo de pedido de eventos

O exemplo a seguir mostra os eventos de cliente que foram criados em uma página que inclui dois controles UpdatePanel, um aninhado em outro.Você notará uma diferença entre clicar no botão do painel pai e clicar no botão no painel aninhado.Botão no painel pai faz com que o painel pai seja atualizado e o painel aninhado seja excluído e recriado.Botão no painel aninhado faz com que apenas o painel aninhado seja atualizado.

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script >

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>Client Event Example</title>
    <style type="text/css">
    #OuterPanel { width: 600px; height: 200px; border: 2px solid blue; }
    #NestedPanel { width: 596px; height: 60px; border: 2px solid green; 
                   margin-left:5 px; margin-right:5px; margin-bottom:5px;}
    </style>
</head>
<body>
    <form id="form1" >
    <div>
        <asp:ScriptManager ID="ScriptManager1" >
        <Scripts>
           <asp:ScriptReference Path="ClientEventTest.js" />
        </Scripts>
        </asp:ScriptManager>
        <asp:UpdatePanel ID="OuterPanel" UpdateMode="Conditional" >
        <ContentTemplate>
            Postbacks from inside the outer panel and inner panel are
            asynchronous postbacks. PRM = Sys.WebForms.PageRequestManager. APP = Sys.Application.
            <br /><br />
            <asp:Button ID="OPButton1" Text="Outer Panel Button"  />
            Last updated on
            <%= DateTime.Now.ToString() %>
            <br /><br />

            <asp:UpdatePanel ID="NestedPanel" UpdateMode="Conditional" >
            <ContentTemplate>
                <asp:Button ID="NPButton1" Text="Nested Panel 1 Button"  />
                Last updated on
                <%= DateTime.Now.ToString() %>
                <br />
            </ContentTemplate>
            </asp:UpdatePanel>
        </ContentTemplate>
        </asp:UpdatePanel>

        <input type="button" onclick="Clear();" value="Clear" />

        <asp:Button ID="FullPostBack"  Text="Full Postback" />
        <a href="https://www.microsoft.com">Test Window Unload</a>
        <br />
        <span id="ClientEvents"></span>    
    </div>
    </form>
</body>
</html>
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script >

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>Client Event Example</title>
    <style type="text/css">
    #OuterPanel { width: 600px; height: 200px; border: 2px solid blue; }
    #NestedPanel { width: 596px; height: 60px; border: 2px solid green; 
                   margin-left:5 px; margin-right:5px; margin-bottom:5px;}
    </style>
</head>
<body>
    <form id="form1" >
    <div>
        <asp:ScriptManager ID="ScriptManager1" >
        <Scripts>
           <asp:ScriptReference Path="ClientEventTest.js" />
        </Scripts>
        </asp:ScriptManager>
        <asp:UpdatePanel ID="OuterPanel" UpdateMode="Conditional" >
        <ContentTemplate>
            Postbacks from inside the outer panel and inner panel are
            asynchronous postbacks. PRM = Sys.WebForms.PageRequestManager. APP = Sys.Application.

            <br /><br />
            <asp:Button ID="OPButton1" Text="Outer Panel Button"  />
            Last updated on
            <%= DateTime.Now.ToString() %>
            <br /><br />

            <asp:UpdatePanel ID="NestedPanel" UpdateMode="Conditional" >
            <ContentTemplate>
                <asp:Button ID="NPButton1" Text="Nested Panel 1 Button"  />
                Last updated on
                <%= DateTime.Now.ToString() %>
                <br />
            </ContentTemplate>
            </asp:UpdatePanel>
        </ContentTemplate>
        </asp:UpdatePanel>

        <input type="button" onclick="Clear();" value="Clear" />

        <asp:Button ID="FullPostBack"  Text="Full Postback" />
        <a href="https://www.microsoft.com">Test Window Unload</a>
        <br />
        <span id="ClientEvents"></span>    
    </div>
    </form>
</body>
</html>
// Hook up Application event handlers.
var app = Sys.Application;
app.add_load(ApplicationLoad);
app.add_init(ApplicationInit);
app.add_disposing(ApplicationDisposing);
app.add_unload(ApplicationUnload);


// Application event handlers for component developers.
function ApplicationInit(sender) {
  var prm = Sys.WebForms.PageRequestManager.getInstance();
  if (!prm.get_isInAsyncPostBack())
  {
      prm.add_initializeRequest(InitializeRequest);
      prm.add_beginRequest(BeginRequest);
      prm.add_pageLoading(PageLoading);
      prm.add_pageLoaded(PageLoaded);
      prm.add_endRequest(EndRequest);
  }
  $get('ClientEvents').innerHTML += "APP:: Application init. <br/>";
}
function ApplicationLoad(sender, args) {
  $get('ClientEvents').innerHTML += "APP:: Application load. ";
  $get('ClientEvents').innerHTML += "(isPartialLoad = " + args.get_isPartialLoad() + ")<br/>";
}
function ApplicationUnload(sender) {
  alert('APP:: Application unload.');
}
function ApplicationDisposing(sender) {
  $get('ClientEvents').innerHTML += "APP:: Application disposing. <br/>";

}
// Application event handlers for page developers.
function pageLoad() {
  $get('ClientEvents').innerHTML += "PAGE:: Load.<br/>";
}

function pageUnload() {
  alert('Page:: Page unload.');
}

// PageRequestManager event handlers.
function InitializeRequest(sender, args) {
  $get('ClientEvents').innerHTML += "<hr/>";
  $get('ClientEvents').innerHTML += "PRM:: Initializing async request.<br/>";  
}
function BeginRequest(sender, args) {
  $get('ClientEvents').innerHTML += "PRM:: Begin processing async request.<br/>";
}
function PageLoading(sender, args) {
  $get('ClientEvents').innerHTML += "PRM:: Loading results of async request.<br/>";
  var updatedPanels = printArray("PanelsUpdating", args.get_panelsUpdating());
  var deletedPanels = printArray("PanelsDeleting", args.get_panelsDeleting());

  var message = "-->" + updatedPanels + "<br/>-->" + deletedPanels + "<br/>";

  document.getElementById("ClientEvents").innerHTML += message;
}
function PageLoaded(sender, args) {
  $get('ClientEvents').innerHTML += "PRM:: Finished loading results of async request.<br/>";
  var updatedPanels = printArray("PanelsUpdated", args.get_panelsUpdated());
  var createdPanels = printArray("PaneslCreated", args.get_panelsCreated());

  var message = "-->" + updatedPanels + "<br/>-->" + createdPanels + "<br/>";

  document.getElementById("ClientEvents").innerHTML += message;
}
function EndRequest(sender, args) {
  $get('ClientEvents').innerHTML += "PRM:: End of async request.<br/>";
}

// Helper functions.
function Clear()
{
  $get('ClientEvents').innerHTML = "";
}
function printArray(name, arr)
{
    var panels = name + '=' + arr.length;
    if(arr.length > 0)
    {
        panels += "(";
        for(var i = 0; i < arr.length; i++)
        {
            panels += arr[i].id + ',';
        }
        panels = panels.substring(0, panels.length - 1);
        panels += ")";
    }
    return panels;
}
// Hook up Application event handlers.
var app = Sys.Application;
app.add_load(ApplicationLoad);
app.add_init(ApplicationInit);
app.add_disposing(ApplicationDisposing);
app.add_unload(ApplicationUnload);


// Application event handlers for component developers.
function ApplicationInit(sender) {
  var prm = Sys.WebForms.PageRequestManager.getInstance();
  if (!prm.get_isInAsyncPostBack())
  {
      prm.add_initializeRequest(InitializeRequest);
      prm.add_beginRequest(BeginRequest);
      prm.add_pageLoading(PageLoading);
      prm.add_pageLoaded(PageLoaded);
      prm.add_endRequest(EndRequest);
  }
  $get('ClientEvents').innerHTML += "APP:: Application init. <br/>";
}
function ApplicationLoad(sender, args) {
  $get('ClientEvents').innerHTML += "APP:: Application load. ";
  $get('ClientEvents').innerHTML += "(isPartialLoad = " + args.get_isPartialLoad() + ")<br/>";
}
function ApplicationUnload(sender) {
  alert('APP:: Application unload.');
}
function ApplicationDisposing(sender) {
  $get('ClientEvents').innerHTML += "APP:: Application disposing. <br/>";

}
// Application event handlers for page developers.
function pageLoad() {
  $get('ClientEvents').innerHTML += "PAGE:: Load.<br/>";
}

function pageUnload() {
  alert('Page:: Page unload.');
}

// PageRequestManager event handlers.
function InitializeRequest(sender, args) {
  $get('ClientEvents').innerHTML += "<hr/>";
  $get('ClientEvents').innerHTML += "PRM:: Initializing async request.<br/>";  
}
function BeginRequest(sender, args) {
  $get('ClientEvents').innerHTML += "PRM:: Begin processing async request.<br/>";
}
function PageLoading(sender, args) {
  $get('ClientEvents').innerHTML += "PRM:: Loading results of async request.<br/>";
  var updatedPanels = printArray("PanelsUpdating", args.get_panelsUpdating());
  var deletedPanels = printArray("PanelsDeleting", args.get_panelsDeleting());

  var message = "-->" + updatedPanels + "<br/>-->" + deletedPanels + "<br/>";

  document.getElementById("ClientEvents").innerHTML += message;
}
function PageLoaded(sender, args) {
  $get('ClientEvents').innerHTML += "PRM:: Finished loading results of async request.<br/>";
  var updatedPanels = printArray("PanelsUpdated", args.get_panelsUpdated());
  var createdPanels = printArray("PaneslCreated", args.get_panelsCreated());

  var message = "-->" + updatedPanels + "<br/>-->" + createdPanels + "<br/>";

  document.getElementById("ClientEvents").innerHTML += message;
}
function EndRequest(sender, args) {
  $get('ClientEvents').innerHTML += "PRM:: End of async request.<br/>";
}

// Helper functions.
function Clear()
{
  $get('ClientEvents').innerHTML = "";
}
function printArray(name, arr)
{
    var panels = name + '=' + arr.length;
    if(arr.length > 0)
    {
        panels += "(";
        for(var i = 0; i < arr.length; i++)
        {
            panels += arr[i].id + ',';
        }
        panels = panels.substring(0, panels.length - 1);
        panels += ")";
    }
    return panels;
}

Ordem de eventos para cenários comuns

A ordem de eventos depende de que controles são usados na página e o tipo de solicitação que é feita (solicitação inicial, postback ou postback assíncrono).Esta seção descreve a ordem de eventos para vários cenários comuns.

Solicitação inicial

Durante a solicitação inicial para a página, um número limitado de eventos do cliente é gerado.Suponha o cenário a seguir para a solicitação inicial:

Os seguintes eventos de cliente ocorrem nesta ordem:,

  1. A solicitação inicial é enviada para o servidor.

  2. A resposta é recebida pelo cliente.

  3. A instância Application gera o evento init.

  4. A instância Application gera o evento load.

O evento init da instância Application é gerado apenas uma vez durante a vida útil da página no navegador.Ele não é gerado para postbacks assíncronos subsequentes.Durante uma solicitação inicial, nenhum evento PageRequestManager é gerado.

Postback assíncrono

Um postback assíncrono envia alguns dados da página para o servidor, recebe uma resposta e atualiza uma parte da página.Suponha o cenário a seguir para um postback assíncrono:

Os seguintes eventos de cliente ocorrem nesta ordem:,

  1. O botão dentro de UpdatePanel é clicado, e inicia um postback assíncrono.

  2. A instância PageRequestManager gera o evento initializeRequest.

  3. A instância PageRequestManager gera o evento beginRequest.

  4. A solicitação inicial é enviada para o servidor.

  5. A resposta é recebida pelo cliente.

  6. A instância PageRequestManager gera o evento pageLoading.

  7. A instância PageRequestManager gera o evento pageLoaded.

  8. A instância Application gera o evento load.

  9. A instância PageRequestManager gera o evento endRequest.

Para obter mais informações, consulte Trabalhando com eventos PageRequestManager.

Observe que o evento load da instância Application é gerado após o evento PageRequestManagerpageLoaded e antes do evento endRequest.

Vários Postbacks assíncronos

Vários postbacks assíncronos podem ocorrer quando os usuários iniciam uma nova solicitação antes de uma solicitação anteriormente iniciada terminar o processamento no servidor ou no navegador.Suponha o cenário a seguir para vários postbacks assíncronos:

  • A página contém um controle ScriptManager, e SupportsPartialRendering do controle e a propriedade EnablePartialRendering são ambos true.

  • A página contém um controle UpdatePanel.

  • Um botão dentro do controle UpdatePanel que inicia um postback assíncrono é clicado duas vezes.O segundo clique ocorre enquanto o servidor está processando a solicitação iniciada pelo primeiro clique.

  • Uma resposta para a primeira solicitação é retornada com êxito do servidor.

Os seguintes eventos de cliente ocorrem nesta ordem:,

  1. O botão dentro de UpdatePanel é clicado, e inicia um postback assíncrono.

  2. A instância PageRequestManager gera o evento initializeRequest.

  3. A instância PageRequestManager gera o evento beginRequest.

  4. A solicitação inicial é enviada para o servidor.

  5. O botão é clicado novamente, e inicia um segundo postback assíncrono.

  6. A instância PageRequestManager gera o evento initializeRequest para o segundo clique do botão.

  7. A instância PageRequestManager gera o evento endRequest para o primeiro clique do botão.

  8. A instância PageRequestManager gera o evento beginRequest para o segundo clique do botão.

  9. A solicitação iniciada pelo segundo clique é enviada para o servidor.

  10. A resposta é recebida para o segundo clique.

  11. A instância PageRequestManager gera o evento pageLoading.

  12. A instância PageRequestManager gera o evento pageLoaded.

  13. A instância Application gera o evento load.

  14. A instância PageRequestManager gera o evento endRequest.

O comportamento padrão de postbacks assíncronos é que o postback assíncrono mais recente tem precedência.Se dois postbacks assíncronos ocorrem em sequência, e se o primeiro postback ainda está sendo processado no navegador, o primeira postback é cancelado.Se o primeiro postback tiver sido enviado para o servidor, o servidor processa a segunda solicitação quando ele chega e não retorna a primeira solicitação.Para obter informações sobre como dar prioridade a um postback assíncrono específico, consulte Fornecer precedência para um postback assíncrono específico.

Quando o usuário navega fora de uma página, a página atual é descarregada a partir do navegador e você pode manipular o evento unload para liberar recursos.Suponha o cenário a seguir para navegar fora de uma página:

Os seguintes eventos do cliente são gerados, na seguinte ordem:

  1. A solicitação para nova página é iniciada.

  2. A resposta para a nova página é recebida pelo navegador.

  3. A instância Application gera o evento unload.

  4. A página de registro é exibida.

Se houver um erro na solicitação para a nova página, o evento unload ainda é gerado, mas a nova página não é exibida.

Consulte também

Conceitos

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

Definindo Propriedades de Componente Personalizadas e Disparando Eventos PropertyChanged

Trabalhando com eventos PageRequestManager

Criando eventos de cliente personalizados