Introdução ao Controle UpdateProgress

Neste tutorial, você usará controles UpdateProgress para exibir o andamento de atualizações parciais de página.Se uma página contiver controles UpdatePanel, você também pode incluir controles UpdateProgress para manter os usuários informados sobre o status das atualizações parciais da página.Você pode usar um controle UpdateProgress para representar o progresso da atualização parcial de página para a página inteira.Como alternativa, você pode incluir um controle UpdateProgress de cada controle UpdatePanel.Ambos esses padrões são mostrados neste tutorial.

Pré-requisitos

Para implementar os procedimentos no seu próprio ambiente de desenvolvimento você precisa:

  • Microsoft Visual Studio 2005 ou Visual Web Developer Express Edition.

  • Um site da Web ASP.NET habilitado para AJAX.

Usando um único Controle UpdateProgress

Você começará usando um único controle UpdateProgress para mostrar o progresso para todas as atualizações parciais de página na página.

Para usar um único controle UpdateProgress para a página inteira

  1. Crie uma nova página e alterne para modo de Design.

  2. Na guia Extensões AJAX da caixa de ferramentas, clique duas vezes no controle ScriptManager para adicioná-lo à página.

  3. Clique duas vezes no controle UpdatePanel para adicioná-lo à página.

  4. Clique duas vezes no controle UpdateProgress para adicioná-lo à página.

  5. Dentro de UpdateProgress controle, adicione o texto Processing….

  6. Dentro do controle UpdatePanel adicione um controle Label e um controle Button .

  7. conjunto o Text propriedade das Label controlar o renderizados inicial da página.

  8. Clique duas vezes no controle Button para adicionar um manipulador para o botão do evento Click.

  9. Adicione o seguinte código ao manipulador Click, que cria artificialmente um atraso de três segundos e, em seguida, exibe a hora atual.

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        ' Introducing delay for demonstration.
        System.Threading.Thread.Sleep(3000)
        Label1.Text = "Page refreshed at " & _
            DateTime.Now.ToString()
    End Sub
    
    protected void Button1_Click(object sender, EventArgs e)
    {
        // Introducing delay for demonstration.
        System.Threading.Thread.Sleep(3000);
        Label1.Text = "Page refreshed at " +
            DateTime.Now.ToString();       
    }
    
    Observação:

    O manipulador para o evento Click introduz intencionalmente um atraso para este tutorial.Na prática, você poderia não introduzir um atraso.Em vez disso, o atraso deve ser o resultado do tráfego do servidor ou do código que demora para processar, como uma consulta ao banco de dados de execução demorada .

  10. Salve suas alterações e, em seguida, pressione CTRL + F5 para exibir a página em um navegador.

  11. Clique no botão.

    Após um pequeno intervalo, a mensagem de progresso é exibida.Quando o manipulador para o evento Click tiver terminado, a mensagem de progresso estará oculta e o tempo exibido no painel é atualizado.

    O exemplo é estilizado para melhor apresentar a região da página que representa o UpdatePanel.

    <%@ Page Language="VB" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script >
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            ' Introducing delay for demonstration.
            System.Threading.Thread.Sleep(3000)
            Label1.Text = "Page refreshed at " & _
                DateTime.Now.ToString()
        End Sub
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head id="Head1" >
        <title>UpdateProgress Tutorial</title>
        <style type="text/css">
        #UpdatePanel1 { 
          width:300px; height:100px;
         }
        </style>
    </head>
    <body>
        <form id="form1" >
        <div>
            <asp:ScriptManager ID="ScriptManager1" >
            </asp:ScriptManager>
            <asp:UpdatePanel ID="UpdatePanel1" >
                <ContentTemplate>
                    <fieldset>
                    <legend>UpdatePanel</legend>
                    <asp:Label ID="Label1"  Text="Initial page rendered."></asp:Label><br />
                    <asp:Button ID="Button1"  Text="Button" OnClick="Button1_Click" />
                    </fieldset>
                </ContentTemplate>
            </asp:UpdatePanel>
            <asp:UpdateProgress ID="UpdateProgress1" >
                <ProgressTemplate>
                    Processing...
                </ProgressTemplate>
            </asp:UpdateProgress>
    
        </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 >
        protected void Button1_Click(object sender, EventArgs e)
        {
            // Introducing delay for demonstration.
            System.Threading.Thread.Sleep(3000);
            Label1.Text = "Page refreshed at " +
                DateTime.Now.ToString();       
        }
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head id="Head1" >
        <title>UpdateProgress Tutorial</title>
        <style type="text/css">
        #UpdatePanel1 { 
          width:300px; height:100px;
         }
        </style>
    </head>
    <body>
        <form id="form1" >
        <div>
            <asp:ScriptManager ID="ScriptManager1" >
            </asp:ScriptManager>
            <asp:UpdatePanel ID="UpdatePanel1" >
                <ContentTemplate>
                    <fieldset>
                    <legend>UpdatePanel</legend>
                    <asp:Label ID="Label1"  Text="Initial page rendered."></asp:Label><br />
                    <asp:Button ID="Button1"  Text="Button" OnClick="Button1_Click" />
                    </fieldset>
                </ContentTemplate>
            </asp:UpdatePanel>
            <asp:UpdateProgress ID="UpdateProgress1" >
                <ProgressTemplate>
                    Processing...
                </ProgressTemplate>
            </asp:UpdateProgress>
    
        </div>
        </form>
    </body>
    </html>
    

Usando Vários Controles UpdateProgress

Um controle UpdateProgress na página pode mostrar uma mensagem de progresso para todos os controles UpdatePanel na página.Postagens assíncronas originadas dentro de um controle UpdatePanel força o controle UpdateProgress a exibir sua mensagem.Postagens de controles que são disparadores para o painel também exibem a mensagem.

Você pode associar o controle UpdateProgress a um único controle UpdatePanel definindo o andamento do controle de propriedades AssociatedUpdatePanelID.Nesse caso, o controle UpdateProgress exibe uma mensagem somente quando um postback se origina dentro do controle UpdatePanel associado.

No próximo procedimento, dois controles UpdateProgress são adicionados a uma página, cada um associado a um outro controle UpdatePanel.

Para usar vários controles UpdateProgress em uma página

  1. Crie uma nova página e alterne para modo de Design.

  2. Na guia Extensões AJAX da caixa de ferramentas, clique duas vezes no controle ScriptManager para adicioná-lo à página.

  3. Dê dois cliques duas vezes no controle UpdatePanel para adicionar duas instâncias do controle à página.

  4. Em cada controle UpdatePanel, adicione um controle Label e um controle Button .

  5. conjunto o Text propriedade de ambos Label controles de painel inicialmente processados.

  6. Clique duas vezes em cada controle Button para adicionar um manipulador para cada botão do evento Click.

  7. Adicione o seguinte código ao manipulador Click, que cria artificialmente um atraso de três segundos e, em seguida, exibe a hora atual.

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        ' Introducing delay for demonstration.
        System.Threading.Thread.Sleep(3000)
        Label1.Text = "Page refreshed at " & _
            DateTime.Now.ToString()
    End Sub
    
    Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        ' Introducing delay for demonstration.
        System.Threading.Thread.Sleep(3000)
        Label1.Text = "Page refreshed at " & _
            DateTime.Now.ToString()
    End Sub
    
    protected void Button1_Click(object sender, EventArgs e)
    {
        // Introducing delay for demonstration.
        System.Threading.Thread.Sleep(3000);
        Label1.Text = "Page refreshed at " +
            DateTime.Now.ToString();       
    }
    
    protected void Button2_Click(object sender, EventArgs e)
    {
        // Introducing delay for demonstration.
        System.Threading.Thread.Sleep(3000);
        Label2.Text = "Page refreshed at " +
            DateTime.Now.ToString();       
    
    }
    
  8. Alternar para modo Design.

  9. Clique dentro do primeiro controle UpdatePanel e adicione um controle UpdateProgress.

  10. Dentro de UpdateProgress controle, adicione o texto Painel1 atualizando.

    Isso define a propriedade ProgressTemplate.

  11. selecionar o UpdateProgress controle e, na janela Propriedades, defina o AssociatedUpdatePanelID propriedade para UpdatePanel1.

  12. Clique dentro do segundo controle UpdatePanel e adicione um segundo controle UpdateProgress.

  13. conjunto o texto do UpdateProgress o controle para Painel2 atualizando e defina seu AssociatedUpdatePanelID propriedade para UpdatePanel2.

  14. Salve suas alterações e, em seguida, pressione CTRL + F5 para exibir a página em um navegador.

  15. Clique no botão no primeiro painel.

    Após um pequeno intervalo, a mensagem de progresso associada com o primeiro painel é exibida.O outro controle UpdateProgress não será exibido.

  16. Clique no botão no segundo painel.

    A mensagem de progresso associada com o segundo painel é exibida.

    Observação:

    Por padrão, iniciando um novo postback assíncrono enquanto um anterior está em andamento cancela a primeira postagem.Para obter mais informações, consulte Fornecer precedência para um postback assíncrono específico.

    O exemplo é estilizado para melhor apresentar a região da página que representa o UpdatePanel.

    <%@ Page Language="VB" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script >
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            ' Introducing delay for demonstration.
            System.Threading.Thread.Sleep(3000)
            Label1.Text = "Page refreshed at " & _
                DateTime.Now.ToString()
        End Sub
    
        Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            ' Introducing delay for demonstration.
            System.Threading.Thread.Sleep(3000)
            Label1.Text = "Page refreshed at " & _
                DateTime.Now.ToString()
        End Sub
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head id="Head1" >
        <title>UpdateProgress Tutorial</title>
        <style type="text/css">
        #UpdatePanel1, #UpdatePanel2 { 
          width:300px; height:100px;
         }
        </style>
    </head>
    <body>
        <form id="form1" >
        <div>
            <asp:ScriptManager ID="ScriptManager1" >
            </asp:ScriptManager>
            <asp:UpdatePanel ID="UpdatePanel1" >
                <ContentTemplate>
                    <fieldset>
                    <legend>UpdatePanel1</legend>
                    <asp:Label ID="Label1"  Text="Panel initially rendered."></asp:Label>
                    <br />
                    <asp:Button ID="Button1"  Text="Button" OnClick="Button1_Click" />
                    <asp:UpdateProgress ID="UpdateProgress1"  AssociatedUpdatePanelID="UpdatePanel1">
                        <ProgressTemplate>
                            Panel1 updating...
                        </ProgressTemplate>
                    </asp:UpdateProgress>
                    </fieldset>
                </ContentTemplate>
            </asp:UpdatePanel>
            <asp:UpdatePanel ID="UpdatePanel2" >
                <ContentTemplate>
                    <fieldset>
                    <legend>UpdatePanel2</legend>
                    <asp:Label ID="Label2"  Text="Panel initially rendered."></asp:Label>
                    <br />
                    <asp:Button ID="Button2"  Text="Button" OnClick="Button2_Click" />
                    <asp:UpdateProgress ID="UpdateProgress2"  AssociatedUpdatePanelID="UpdatePanel2">
                        <ProgressTemplate>
                            Panel2 updating....
                        </ProgressTemplate>
                    </asp:UpdateProgress>
                    </fieldset>
                </ContentTemplate>
            </asp:UpdatePanel>
    
        </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 >
        protected void Button1_Click(object sender, EventArgs e)
        {
            // Introducing delay for demonstration.
            System.Threading.Thread.Sleep(3000);
            Label1.Text = "Page refreshed at " +
                DateTime.Now.ToString();       
        }
    
        protected void Button2_Click(object sender, EventArgs e)
        {
            // Introducing delay for demonstration.
            System.Threading.Thread.Sleep(3000);
            Label2.Text = "Page refreshed at " +
                DateTime.Now.ToString();       
    
        }
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head id="Head1" >
        <title>UpdateProgress Tutorial</title>
        <style type="text/css">
        #UpdatePanel1, #UpdatePanel2 { 
          width:300px; height:100px;
         }
        </style>
    </head>
    <body>
        <form id="form1" >
        <div>
            <asp:ScriptManager ID="ScriptManager1" >
            </asp:ScriptManager>
            <asp:UpdatePanel ID="UpdatePanel1" >
                <ContentTemplate>
                    <fieldset>
                    <legend>UpdatePanel1</legend>
                    <asp:Label ID="Label1"  Text="Panel initially rendered."></asp:Label>
                    <br />
                    <asp:Button ID="Button1"  Text="Button" OnClick="Button1_Click" />
                    <asp:UpdateProgress ID="UpdateProgress1"  AssociatedUpdatePanelID="UpdatePanel1">
                        <ProgressTemplate>
                            Panel1 updating...
                        </ProgressTemplate>
                    </asp:UpdateProgress>
                    </fieldset>
                </ContentTemplate>
            </asp:UpdatePanel>
            <asp:UpdatePanel ID="UpdatePanel2" >
                <ContentTemplate>
                    <fieldset>
                    <legend>UpdatePanel2</legend>
                    <asp:Label ID="Label2"  Text="Panel initially rendered."></asp:Label>
                    <br />
                    <asp:Button ID="Button2"  Text="Button" OnClick="Button2_Click" />
                    <asp:UpdateProgress ID="UpdateProgress2"  AssociatedUpdatePanelID="UpdatePanel2">
                        <ProgressTemplate>
                            Panel2 updating....
                        </ProgressTemplate>
                    </asp:UpdateProgress>
                    </fieldset>
                </ContentTemplate>
            </asp:UpdatePanel>
    
        </div>
        </form>
    </body>
    </html>
    

Revisão

Este tutorial introduziu duas maneiras para usar o controle UpdateProgress.A primeira maneira é adicionar um controle UpdateProgress na página que não está associada com qualquer controle UpdatePanel específico.Nesse caso, o controle mostra uma mensagem de progresso para todos os controles UpdatePanel.A segunda maneira para usar o controle de andamento é adicionar vários controles UpdateProgress e associar cada um com um controle UpdatePanel diferente.

Consulte também

Tarefas

Introdução ao Controle UpdatePanel

Conceitos

UpdateProgress Control Overview

Visão geral de renderização de página parcial

Referência

UpdateProgress

UpdatePanel