Capire e decodificare il ViewState di ASP.NET

di Cristian Civera, in ASP.NET,
  • 0
  • 0
  • 0
  • 19,14 KB

Chi sviluppa con ASP.NET conosce sicuramente il ViewState ed il relativo utilizzo, considerato che è una delle principali caratteristiche di questo nuovo modo di realizzare applicazioni web.

Il ViewState rappresenta lo stato della pagina dopo la sua ultima elaborazione sul server ed è utilizzato per mantenere lo stato dei controls di una pagina ASP.NET. All'atto pratico, si tratta di un campo nascosto di nome __VIEWSTATE e che contiene lo stato, in forma di stringa codificata, degli oggetti della pagina.

Ecco un esempio di ViewState visibile guardando il codice HTML restituito da una web form:

<form name="_ctl0" method="post" action="Default2.aspx" id="_ctl0">
<input type="hidden" name="__VIEWSTATE" value="dDwtMTE4MDEwNzg1Ozs+uiRvLTE6bTNO6p6Wxm6N17EV0EA="/>

Utilità del ViewState

La sua utilità nasce quando dobbiamo conoscere certe proprietà di un nostro oggetto prima che la pagina sia nviata nuovamente al server.

Un esempio pratico può essere una semplice Label: in seguito ad un postback (cioè al re-invio della pagina al server web) possiamo accedere alla proprietà Text e saperne il valore precedente. Nell'esempio allegato (che si può scaricare) sfrutteremo proprio questa capacità per incrementarne il valore.

E' un po' il meccanismo che il Framework implementa internamente, per verificare tramite l'evento TextChanged, che il nuovo valore immesso dall'utente sia diverso da quello precedente.

Inoltre la proprietà ViewState della classe Page dispone di una collezione per memorizzare qualsiasi altra coppia chiave/valore noi desiderassimo, in modo da poter tenere traccia di valori personalizzati, ad esempio all'interno di un custom control.

Funzionalità fantastiche se ci si rende conto che la programmazione della nostra applicazione web si avvicina moltissimo a quella windows tipica di visual basic.

Come funziona?

Il meccanismo del funzionamento del ViewState è abbastanza semplice: ad ogni postback, vengono rigenerati i controlli tramite la pagina ASP.NET e viene scatenato l'evento Page_Init .

In questo momento i controlli hanno i loro valori di default, che saranno cambiati in seguito, prelevando il ViewState attraverso la funzione protetta LoadPageStateFromPersistenceMedium della classe Page ed imposta per ogni controllo le relative proprietà. A questo punto viene scatenato l'evento Page_Load e i successivi eventi dei vari controlli, per poi precedere al salvataggio del ViewState, attraverso la funzione SavePageStateToPersistenceMedium .

Questi due metodi hanno il compito di immagazzinare il ViewState e di decodificarlo o codificarlo. L'oggetto che devono memorizzare non è un insieme di tutti i controlli, ma un tipo Triplet contenuto all'interno del namespace System.Web.UI , un oggetto ricorsivo che memorizza le informazioni minime passate dai controlli web e che viene codificato tramite la classe LosFormatter : viene prima trasformato in un file di tipo XML e quindi codificato in Base64 .

Immagine

Perché mai questo formato particolare? Essenzialmente i motivi sono due:

  • rendere il meno pesante possibile il vie state poiché viene aggiunto al resto del codice HTML ed inviato ad ogni postback;
  • garantire un minimo di sicurezza su ciò che è contenuto.

Da questo si può dedurre che dove il view state non serva, è opportuno e consigliabile disabilitarlo a livello di pagina, utilizzando questa direttiva:

<%@ Page EnableViewState="false" %>

Oppure sulla base di un singolo controllo

<asp:Label runat="server" EnableViewState="false"/>
2 pagine in totale: 1 2

Attenzione: Questo articolo contiene un allegato.

Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti