Utilizando Ajax com as facilidades do Asp.Net    

No último post, comentei que é uma tendência a utilização cada vez maior de Ajax nas aplicações Web. Particularmente acredito que a única utilidade de se utilizar WebForms em aplicações web hoje em dia é se for com uso de Ajax, junto com uma boa quantidade de JavaScript, para fazer a experiência do usuário ser cada vez melhor.

Tudo bem, podemos falar que é muito fácil de desenvolver, é só clicar e arrastar e tudo mais. Mas é fato que os usuários hoje cada vez mais querem uma experiência rica ao utilizar uma aplicação. Quanto mais próximo do desktop melhor. A única experiência próxima do desktop que existe utilizando o simples WebForm é a que o próprio desenvolvedor experimenta, que muitas vezes acredita que Web é só clicar e arrastar, como no WindowsForm, e que com um UpdatePanel tudo se resolve sem “refresh”.

Ledo engano. As telas vão ficando cada vez mais complexas, com mais requisições ao servidor, e ai um simples clique em um DropDownList, com AutoPostBack, demora 5 segundos para chegar em um botão, e o usuário já não fica tão satisfeito assim.

Este é o primeiro post de uma pequena série que vou falar da biblioteca Client Side do Asp.Net, e das capacidades Server Side que auxiliam no acesso ao Server dos códigos Client Side. O objetivo é que no final desta série você consiga desenvolver um site Asp.Net, com WebForm, que consiga proporcionar ao usuário um experiência pelo menos melhor que a normal.

Não utilizarei bibliotecas javascripts como JQuery, porque o objetivo aqui é falar das bibliotecas do Asp.Net.

PageMethods

Vamos começar falando de PageMethods, uma técnica que ainda não é muito utilizada no WebForms, mas que facilita muito a utilização de Ajax em páginas Asp.Net.

PageMethods são métodos de uma página WebForm, expostos como um WebMethods. Quando utilizamos PageMethods, a página web se torna um mini WebServices, inclusive, podendo ser utilizada por qualquer tecnologia que acesse métodos HTTP, como WCF, Java, ou um simples código JavaScript que faz uso do objeto XMLHttpRequest, como o JQuery.

Para criar um método HTTP em uma página é muito simples, basta criar um método estático decorado com o atributo WebMethod, localizado no namespace System.Web.Services. Eexemplo:

 [WebMethod]

        public static string Teste(string nome)
        {
            return string.Concat("Olá ", nome, ".");
        }

 Apenas assim já conseguiríamos utilizar este método método via XMLHttpRequest, ou pelo método Ajax do JQuery.

Mas para ficar interessante, é interessante adicionarmos o controle ScriptManager, do Asp.Net Ajax, à página, com a propriedade EnablePageMethods setada com o valor True:

<asp:ScriptManager runat="server" ID="maganger" EnablePageMethods="true"></asp:ScriptManager>

Desta forma, o Asp.Net criará um Proxy para o método na página, encapsulando no objeto PageMethods no ClientSide.

Para invocar o método, precisamos apenas chamar o método definido no ServerSide através do objeto PageMethods no Client Side, passando como parâmetro os parâmetros definidos no Server Side (nome caso do exemplo, o parâmetro nome), além de um método para receber o retorno no caso de sucesso e o retorno no caso de falha (exception):

PageMethods.Teste(“Frederico”,callbackSucesso,callbackErro);

O método de retorno de sucesso tem como parâmetros, o retorno do PageMethods, caso haja, como primeiro parâmetro, e os demais parâmetros são informações de contexto, informações de conexão, etc. Para hoje, precisamos apenas saber do primeiro parâmetro, o retorno do PageMethod Teste

No caso do retorno de falha, o primeiro parâmetro é a exceção, inclusive com StackTrace, para o momento precisamos apenas conhecimento do primeiro parâmetro também.

Para testarmos o método acima podemos fazer a seguinte página:

 

Ao clicarmos no botão Testar, a requisição irá assíncrona até o servidor e voltará, preenchendo o parágrafo de resposta:

 

Com isso já conseguimos ver o funcionamento básico de um PageMetho, porém, o mais legal é que um PageMethods te dá a possibilidade de trabalhar com classes complexas do .Net, ou seja, conseguimos enviar e receber classes de negócios por PageMethods, de forma totalmente transparente.

Imagine que temos um cadastro de pessoas, onde os dados necessários são Nome e e-mail, teremos uma classe assim:

O código abaixo, em HTML/Javascript, mostra como salvar esta classe com PageMethods, com a utilização de um objeto javascript criado com JSON:

 

Perceba que ao clicar no botão salvar:

 

Conseguimos colocar um breakpoint no PageMethods e verificar o conteúdo no lado do Server:

Com isso podemos utilizar qualquer coisa no lado do servidor, como o EntityFramework para persistência. E se quisermos retornar um classe, apenas temos que mudar o tipo do Retorno, que o método callback de sucesso retornará no primeiro parâmetro a classe oriunda do servidor.

Conclusão

A idéia deste post foi dar apenas uma introdução ao PageMethods, para que possamos começar a usar essa velha tecnologia que já está no Asp.Net desde a primeira versão do Asp.Net Ajax Framework, no .Net 2.0, mas que muita gente ainda desconhece.

Temos muitas peculiaridades que abordaremos em posts futuros. Espero que isto possa ajudar alguns de vocês que desconhecem esta tecnologia.

Abraços e até a próxima.

 

 

 

 

 

 

9. agosto 2010 08:37 by Frederico | Comments (5) | Permalink

Comments

Rafael
Assunto muito útil e interessante, abordado com clareza e riqueza de conteúdo.
Parabéns!
01/09/2010 17:07:06 #
Fernando
Muito legal o Post.
Simples e objetivo.
Abs
09/09/2010 02:11:24 #
DataBind na Web

DataBind na Web
14/09/2010 10:00:03 #
Vitor
Frederico,
Muito boa essa explicação, entendí facilmente o conteúdo e consegui resolver o problema que estava me transtornando em Webforms com esse PageMethods que desconhecia até hoje.

Obrigado,
Vitor
07/04/2011 23:50:33 #
Diana Saldanha
Muito bom..
O post foi de grande ajuda...thanks
12/07/2012 01:06:42 #
Comments are closed

Sobre mim

Minha Imagem

Meu nome é Frederico Batista Emídio, trabalho com desenvolvimento de sistemas profissionalmente a oito anos, porém, já faço sites pessoais a pelo menos dez anos.

Para saber mais clique aqui.

Páginas

Calendário

<<  outubro 2018  >>
seteququsedo
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

Visualizar posts em um Calendário
Sigua @fredemidio

MCP Asp.NET