Introdução
Este artigo faz parte de uma série de artigos sobre componentes do Ajax Control Toolkit, cujo objetivo é demonstrar algumas funcionalidades de alguns componentes do pacote.
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 esta 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 sĂŁo atualizadas.
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á autalizado 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.