Monthly Archives: January 2008
ASP.net & AJAX – TechTalks
- UpdatePanel: controlo pai para os controlos que se pretende actualizar via AJAX
- ScriptManager: inclui na página o JavaScript necessário ao partial rendering
A lógica de funcionamento é simples: sempre que existe tentativa de postback, se a acção foi iniciada por um controlo localizado num UpdatePanel, então o código incluído pelo ScriptManager realiza um pedido AJAX, anulando o postback. No servidor o pedido é processado da mesma forma (todo o ciclo de vida da página) à excepção da fase de rendering em que apenas é gerado o html correspondente aos filhos do UpdatePanel. No lado do cliente, as bibliotecas de script disponibilizam ainda um conjunto de eventos do estado do pedido, como porexemplo início de pedido, loading da resposta e fim de pedido. A página pode conter um número ilimitado de UpdatePanel que, por omissão, são todos actualizados quando há um pedido AJAX; esta configuração não será a que provavelmente queremos. Assim, é possível indicar para cada UpdatePanel se este é actualizado de forma independente e também quais os controlos que disparam essa actualização (triggers).
O principal problema desta abordagem é que, estando suportada no modelo já existente do ASP.net, apenas suporta um pedido por sessão em cada momento (mesmo que assíncronos): se um pedido é feito antes de outro terminar, este último será "esmagado". Esta limitação deve-se à utilização do viewstate, que é sempre actualizado.
Script Services
Para resolver o problema anterior e para situações em que é possível redesenhar a UI surge uma outra abordagem que vem trazer mais lógica para o lado do cliente. Aqui é introduzido um novo "tipo" de serviço ASP.net, o ScriptService, que em vez de operar sobre SOAP como os web services "standard", opera sobre JSON! Isso mesmo! E as bibliotecas de script fornecidas suportam a criação de proxy’s tal e qual como "proxy’s .NET" para webservices, ficando transparente a (de)serialização JSON =). A lógica da UI será bastante mais complexa já que o programador tem de reagir aos eventos do utilizador e invocar os serviços adequados. Aqui o principal problema é que apenas dispomos de JavaScript para implementar essa lógica. Esta abordagem seria a "not-so-easy way".
O Dino Esposito referiu ainda que esta tendência para o aumento da lógica no cliente leva a soluções como o Silverlight ou o sucessor do flash (não sei bem o nome!). A meu ver o AJAX ainda vai ser "espremido" durante mais uns tempos, mas provavelmente soluções baseadas em plug-ins robustos para implementar as UI vão revelar-se necessárias mais cedo ou mais tarde.
O Dino ainda foi dizendo algumas curiosidades engraçadas como por exemplo que o objecto XMLHttpRequest que está na base do AJAX foi "inventado" pela Microsoft sob a forma de um ActiveX e foi lançado pela primeira vez em 1999 com o IE 5.0; na altura ninguém ligou.. ou ainda que a especificação DOM tem muitas semelhanças a um modelo DHTML proposto anteriormente pela Microsoft..ou ainda..que o plug-in para o silverlight 2.0 deve ter 20MB..lá para o verão 😐