Gerenciamento de estado Client-Side do ASP.NET

 

Convencionalmente ao desenvolver aplicações para web é necessário guardar o estado do cliente que esta acessando uma determinada página, por exemplo, um sistema que oferece um carrinho de compra deve estar preparado para guardar as informações do usuário como CEP e Nome à medida que o cliente navegue por outras página, dai então a importância da utilização do Gerenciamento de estado do ASP.NET.
 
A plataforma web é baseada no protocolo HTTP que impossibilita a persistência de estado de maneira nativa, isso significa que não é possível saber se uma única instância do browser esta fazendo uma solicitação repetitiva, ou se essas solicitações são do mesmo cliente, devida essa característica o ASP.NET fornece recursos para a persistência de estado.

Gerenciamento de estado (State Management) é o mecanismo que permite que informações(dados) sejam preservados, a medida que o cliente realize solicitações ao servidor.

Para entender esse processo é necessário dividi-lo em duas partes a primeira sendo aquela que acontece do lado do cliente(client-side) a qual será abordada nesse artigo e a segunda do lado do servidor(server-side) que será abordado num futuro artigo.


Recursos do lado do cliente
  
Abaixo são listados os recursos oferecidos pelo ASP.NET para realizar a persistência de estado nas páginas .aspx do lado do cliente, iremos abordar todos não esquecendo de mostrar suas vantagens e desvantagens, bem como, quais os cenários ideais para utilizar cada recurso.

ViewState
Control state
Hidden fields
Cookies
Query strings
 

ViewState
 
Esse recurso permite que o estado dos dados existentes nos controles de uma página, sejam mantidos após o HTTP POST, considerado o recurso mais completo porque possui portabilidade a criptografia, Built-In Types, Dictionary que aceita qualquer objeto com tipo não se limitando a o tipo string.


Implementação

 

// escrever um ViewState

ViewState.Add("DevBrasil", DateTime.Now);

// ler um ViewState

DateTime data = (DateTime)ViewState["DevBrasil"];
 

Cenário
 

Utilize quando ocorrer a necessidade de guardar os valores dos controles através de requisições HTTP POST para uma única página, o ViewState trabalha apenas com requisição HTTP POST, se for realizada uma requisição HTTP GET que é efetivada por exemplo quando é utilizado o HyperLink Control aonde existe um redirecionamento para outra página esse processo irá perder o ViewState.


Vantagem

É gerado um campo do tipo hiddem chamado __VIEWSTATE que tem seu valor criptografado dificultando pessoas mal intencionadas de obter alguma informação sigilosa.
 

Desvantagem
 

Deve-se tomar cuidado na utilização com controles complexos como GridView, dependendo da quantidade de dados que será exibida no controle o ViewState pode chegar a representar mais da metade do tamanho em KB da página, o que fará com que a página demore para ser carregada. Teoricamente quanto mais existir controles que gerem ViewState maior será a página, porém a criticidade existe realmente com controles complexos.

Control state
 

O propósito desse recurso é possibilitar a persistência de dados para os controles que não fazem parte da gestão de gerenciamento feita pelo ViewState, isso significa que alguns controles o ViewState não tem acesso, por exemplo controles criados pelo desenvolvedor (Web Custom Controls).
 

Implementação
 

Para não estender o artigo conceitualmente quando é criado um WebCustomControl esse controle não é gerenciado pelo ViewState então devesse implementar o Control State que implementará o ViewState a esse controle. 
 

Cenário 

 

Convém utilizar quando é criado um Web Custom Control, ou seja, quando é criado um controle personalizado.

 

Vantagem

Permite gerenciar os estados dos controles que não estão sobre a "jurisdição" do ViewSate.

Desvantagem

A implementação é complexa.


Hidden fields  
 

O controle Hidden Field tem o papel de esconder dados dentro do html que não são exibidos para o cliente sendo que a persistência desses dados é válida apenas para uma única página a qual o controle Hidden Field foi adicionado.  
 

Implementação

 

// escrever um HiddenField

<asp:HiddenField ID="hdDevBrasil" runat="server" />

// ler um HiddenField

hdDevBrasil.Value = "1";
  

Cenário
 

Utilize quando existir a necessidade de esconder algum pequeno valor que se resume em alguns caracteres e que não seja sigiloso, esse valor será mantido dentro do corpo do html e não será visível ao usuário. 


Vantagem
  

Consiste de uma maneira simples de gerar o mínimo de html tendo como questão não prioritária a segurança desses dados.
  

Desvantagem
 
 

Não possui portabilidade para objetos, será sempre armazenado tendo seu tipo como string, além de não fornecer recurso nativo para criptografia. 

Cookies

O cookie é um recurso que armazena valores em texto no cliente, sendo que o cookie pode ser criado na memória para uma sessão ou mantido na máquina do cliente, fazendo com que se o usuário desligar o computador a informação persista, o Cookie pode ser visualizado através do cabeçalho http de uma página html.
 

Implementação

 

// setar o valor para um cookie

Response.Cookies[“corDeFundo”].Value = “preto”;

 

// recuperar o valor de um cookie

Request.Cookies[“corDeFundo”].Value.ToString();
 

Cenário
 

Utilizasse geralmente quando existe a necessidade identificar um usuário que esta acessando inúmeras páginas de um determinado Web Site.
 

Vantagem


Permite que a página personalizada para um determinado cliente seja carregada rapidamente porque as informações já estão armazenadas na máquina do cliente.
 

Desvantagem


O usuário pode configurar seu browser para não permitir utilização de cookie, não é possível armazenar dados sigilosos como cartão de crédito.


Query String

 

Query String é um recurso que possibilita a passagem de parâmetros entre url diferentes, através da própria url.
 

Implementação
 

// escrever uma querystring

string url = “DevBrasil/Membros.aspx?nome=” + TextBox1.Text + “&email=” + TextBox2.Text;

Response.Redirect(url);

 

// recuperar o valor de uma querystring

TextBox1.Text = Request.QueryString[“nome”];


Cenário
 
  
Quando é necessário passar parâmetro de uma página para outra, por exemplo existe uma entidade Carro e uma entidade ServicoCarro, bem como, existe uma página Carro.aspx e outra ServicoCarro.aspx, é necessário consultar um serviço para um determinado carro o método recebe como parâmetro o idCarro então a página Carro.aspx chamar a página ServicoCarro.aspx passara o parâmetro id, a url ficara ServicoCarro.aspx?IdCarro=1
 

Vantagem
 
É um recurso que permitir passar dados relevantes de uma página para outra sem armazenar dados no cliente.


Desvantagem

 

Não pode armazenar dados sigilosos, se a url não for tratada usuário mal intencionado pode inserir manualmente dados maliciosos e causas problemas na aplicação.



Nesse artigo, foi demonstrado os recursos existentes do ASP.NET para gerenciamento de estados do lado do cliente e suas implementações.

 

Para saber mais:  

Aprofunde seus conhecimentos sobre este tema na comunidade ASP.NET

Visão Geral sobre o Gerenciamento de Estado do ASP.NET

Recomendações sobre Gerenciamento de Estado do ASP.NET

Exibições: 589

Comentar

Você precisa ser um membro de DevBrasil para adicionar comentários!

Entrar em DevBrasil

Comentário de Diego Messias Batista em 11 maio 2012 às 17:23

Muito bom! Mas eu fiquei com uma dúvida se estou fazendo errado em usar Session o.O! Eu uso Session para quase todas as passagens das minhas paginas, há alguma restrição?

Comentário de Juliano Sales em 5 abril 2012 às 17:48

Creio que uma melhor solução também seria usar o  FormsAuthentication...

Comentário de Eliezer Aquino em 1 abril 2012 às 19:31

Eu costumo usar Session, nos meus projetos.

Comentário de Cleiton Felipe de Moraes em 31 março 2012 às 10:53

Boa Leandro muito bom o artigo....

Comentário de Yan de Lima Justino em 28 março 2012 às 18:00

Muito bom, Leandro! ASP.Net na Veia

© 2017   Criado por Ramon Durães.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço