Front End

19 set, 2008

Utilizando Update Panel e Update Progress

Publicidade

Este artigo faz parte de uma série de artigos sobre componentes do Ajax Control Toolkit, cujo objetivo é demonstrar algumas de suas funcionalidades.

Neste artigo vou explicar e exemplificar dois componentes que considero os mais importantes do pacote Ajax Control Toolkit: o UpdatePanel e o UpdateProgress.

UpdatePanel

O UpdatePanel enriquece muito as aplicações web. Este componente permite que possamos atualizar apenas a área que está delimitada pelo componente, ou seja, podemos atualizar parcialmente o nosso site sem necessidade de criarmos client side scripts.

Um Postback assíncrono tem o seu ciclo de vida igual a um Postback da página, porém no Postback assíncrono apenas o interior de regiões delimitadas é atualizado.

Propriedades do UpdatePanel

Abaixo falarei apenas de algumas das propriedades mais usuais.

  • ChildrenAsTriggers: esta propriedade é por padrão definida como True e indica quando acontece um Postback de um UpdatePanel filho, ou seja, poderia ser utilizado em um cenário, onde temos uma lista de categorias e uma lista de subcategorias, onde as subcategorias devem ser atualizadas conforme a seleção da categoria.
  • UpdateMode: Esta propriedade indica quando um UpdatePanel é executado, esta opção é desconsiderada quando o UpdatePanel estiver dentro de um outro UpdatePanel.

Always, esta opção indica que o UpdatePanel sempre será atualizado, isso é em qualquer postback da página ou componente assíncrono.

Condicional, esta opção indica que o UpdatePanel será atualizado somente quando uma das condições abaixo forem verdadeiras.

– Quando um postback for causado por uma trigger

– Quando o método update() for chamado

– Quando o controle estive dentro do UpdatePanel pai.

– Quando a propriedade ChildrenAsTriggers for true e qualquer controle filho do UpdatePanel causar um postback.

  • Triggers: Esta propriedade permite adicionarmos objetos e eventos, isto serve para indicar o que irá disparar a atualização do UpdatePanel.

Alguns componentes não podem ser adicionados a um componente UpdatePanel tais como:

  • WebParts;
  • TreeView;
  • Menu
  • DetailsView e GridView (quando a propriedade EnableSortingAndPagindCallBack for definida como true.
  • FileUpload
  • Login, ChangePassword, PasswordRecovery e CreateUserWizard
  • Por fim os controles de validação.

Exemplificando

Neste exemplo, vamos codificar uma área para que ela atualize uma informação em determinada região do site sem fazer o postback. Para isso, vamos utilizar dois textbox que irão exibir a data e a hora atual. Primeiramente vamos fazer preencher os dois componentes de maneira convencional, e em seguida vamos adicionar um UpdatePanel e tornar o preenchimento de um dos objetos sem fazer o postback da página.

Para isso, vamos criar um novo projeto e desenhar o webform conforme as definições a seguir.

Na codificação iremos fazer com que ao acionarmos o evento click do botão, o mesmo preencha os dois campos da tela com a data e a hora atual.

Quando executarmos esse aplicativo ele irá retornar a data e a hora na tela dentro de cada TextBox.

Agora vamos modificar utilizando o UpdatePanel para perceber a diferença de um processamento assíncrono. Para isso, basta adicionar o componente UpdatePanel que fica na guia AJAX Extensions e incluir o componente TextBox1 dentro da área do UpdatePanel.

No painel de propriedades do UpdatePanel, vamos parametrizar o comportamento do componente. Para isso vamos alterar a propriedade Triggers e adicionar o gatilho do tipo AsyncPostBack, com a chamada ao componente Button1 para ele atualizar apenas o TextBox1 no evento click, conforme a imagem abaixo.

Agora ao executarmos, perceberemos que no evento Click do Button1 ele irá atualizar apenas o componente que esta dentro do UpdatePanel.

UpdateProgress

Quando trabalhamos com UpdatePanel, executamos tarefas que são assíncronas. Essas não fazem o postback da página, o que não transmite para usuário final a idéia de estar processando. O UpdateProgress serve para indicar o estado da operação, dando maior segurança ao usuário que estará sabendo que a mesma ainda está em execução.

Algumas propriedades do componente

AssociatedUpdatePanelId: esta propriedade permite associar um UpdateProgress com um UpdatePanel.

ProgressTemplate: é definida através de tags HTML e indica a mensagem ou a imagem que será utilizada durante a execução do ProgressTemplate.

DynamicLayout: esta propriedade indica como o componente irá se comportar e renderizar na tela. Se o valor desta propriedade for definida como True, ela não ocupará área na tela e a página se renderizará automaticamente conforme a necessidade. Porém se o valor for false, o mesmo ocupará lugar na página mesmo quando não exibido.

Usando o UpdateProgress

O exemplo a seguir carregará, na página, uma imagem que hospedei em meu link e propositalmente é uma imagem pesada para demorar a carga. Veja o layout abaixo.

Ao rodar este projeto, dependendo do seu link de conexão, demorará para carregar esta imagem. Vamos indicar para o usuário do nosso aplicativo que a imagem está carregando.

Incluiremos um UpdateProgress e um gif indicando o processamento ao nosso projeto. Como dica sugiro o site http://www.ajaxload.info/, neste website há um gerador de gifs.

Nesta tela foram incluídos um ScriptManager, UpdatePanel e dentro do UpdatePanel foram incluídos um label e um control Button.

Abaixo uma Div com um UpdateProgress e a imagem de loading.

A codificação é muito simples. Adicionei no procedimento referente ao evento click do ButtonControl uma chamada ao Sleep para causar um atraso no processamento e para sabermos que algo realmente for atualizado coloquei um DateTime no label.

Agora falta definir a propriedade AssocietadeUpdatePanelID do UpdateProgress para o nome do UpdatePanel que será atualizado.

Ao executar o aplicativo, veremos que, por causa do Sleep, ele criará um atraso de retorno para o usuário e ele irá mostrar o Loading durante esse atraso e ao retornar a informação ocultará a imagem.

Conclusão

A exemplo de aplicações Windows client que permitem maior interação com o usuário, as aplicações web com o auxilio do AJAX estão chegando cada vez mais próximas.

Neste artigo, com o uso do UpdatePanel aprendemos a criar atualizações assíncronas na página sem utilizar scripts client side. Já com o UpdateProgress aprendemos a exibir o estado da operação, ou seja, deixar visível para o usuário quando um elemento de uma página está sendo carregado.