ASP.NET: Server Roundtrip e ViewState

Corso ASP.NET: terza puntata

Esempio funzionante | Sorgente | Scarica il sorgente (zip)

Le form di tipo PostBack, come abbiamo visto nella scorsa puntata, consentono di mantenere lo stato tra le pagine web (“state bag”).

Il “trucco” usato non è nuovo: le form passano e ricevono dal server dei parametri in un campo nascosto. Lo fanno però senza che se ne occupi il programmatore, velocizzando sensibilmente il tempo di sviluppo.

Il campo nascosto prende il nome di Viewstate.

Se analizziamo il sorgente di una pagina Html contenente una Form Postback, ad un certo punto compare qualcosa di simile a:

<input type="hidden" name="__VIEWSTATE" value="dDwtMTA5MDY5ODU4MTt0" />

Si tratta proprio di un campo nascosto il cui valore è una stringa crittografata. La stringa contiene, tra le altre cose, il valore dei controlli della form PostBack precedente l’ultimo invio.

Il Web Form processor di ASP.NET si vedrà così arrivare due valori per i campi: quello attuale (nella Querystring o nella collezione Form) e quello precedente (sottoforma di stringa crittografata che è in grado di decifrare). In questo modo può confrontare, di volta in volta, le variazioni dei controlli della pagina e simulare uno “stato” tra le diverse chiamate della pagina.

Lo svantaggio nell’uso del campo ViewState è dato dalla sua dimensione, che può crescere considerevolmente nel caso di numerosi controlli sulla pagina, sopratutto se questi contengono dati provenienti da un database. Il passaggio di valori tra client e server prende il nome di Server RoundTrip

La soluzione, come vedremo in un’altra puntata, è di disabilitare per tutta la pagina o solo per alcuni controlli il mantenimento dello stato.

Il campo ViewState può anche essere usato in modo esplicito dal programmatore. A differenza dell’oggetto Session o di quello Application, può essere utile per passare dei valori e dei parametri durante i submit della pagina.

Vediamo come con un esempio

Programmare il View State

La pagina contiene un contatore e un campo che visualizza alternativamente il nome di due colori: rosso e nero.

Il primo caricamento della pagina
Il primo caricamento della pagina

Premendo il pulsante, il contatore viene incrementato. Non solo: il colore diventa prima nero, poi ancora rosso, ecc.

La pagina dopo qualche caricamento
La pagina dopo qualche caricamento

Per memorizzare il contatore e il colore da visualizzare è stato usato l’oggetto ViewState.

Se guardiamo il codice (viewstate.aspx), vediamo come è stato realizzato:

51     <div id="colore" runat="server" class="risposta"></div>
54     <span class="txt">Il contatore segna <span id="contatore" runat="server" class="txtb"><%=ViewState("count")%></span> volte.</span>

Sopra sono dichiarati due controlli i cui identificativi sono “colore” e “contatore”.

15 <script language="vb" runat="server">
16 Sub Page_Load(sender as Object, e as EventArgs)
17   
18   If ViewState("colore") = "<font color=‘red’><b>Rosso</b></font>" Then
19     colore.InnerHtml = "<font color=‘black’><b>Nero</b></font>"
20     ViewState("colore") = "<font color=‘black’><b>Nero</b></font>"
21   Else
22     colore.InnerHtml = "<font color=‘red’><b>Rosso</b></font>"  
23     ViewState("colore") = "<font color=‘red’><b>Rosso</b></font>"
24   End If
25   
26   If IsNothing(ViewState("count")) Then
27     ViewState("count") = 1            
28   Else
29     ViewState("count") += 1
30   End If
31   
32 End Sub
33 </script>

Questo è il cuore della pagina.

Il ViewState è un contenitore di oggetti. Per prima cosa si verifica se l’oggetto colore (una stringa) è nero, così da farlo diventare rosso: poiché la prima volta non è nero, è visualizzato come rosso.

Il contatore funziona nello stesso modo: se è la prima volta è posto a 1, altrimenti viene incrementato.

Va notato che per utilizzare il ViewState il bottone di submit è incluso in una form di tipo PostBack (con runat=”server”)

56     <form runat="server">
57       <input type="submit" value="Riprova">
58     </form>

Conclusione

La possibilità di introdurre un modello a stati in ASP.NET porta lo sviluppatore verso un compromesso: usare questa funzionalità bilanciando il numero delle comunicazioni tra client/server e il peso della pagina. Il ViewState può inoltre essere programmato, così da facilitare il passaggio di oggetti tra form di tipo PostBack.

Tag: , ,
  • ASP.NET: Server Roundtrip e ViewState – Codice sorgente dell’esempio
    Sorgenti: viewState.aspx Scarica i sorgenti: aspnet03.zip Articolo a cui si riferisce il codice: ASP.NET: Server Roundtrip e ViewState viewState.aspx – Prova l’esempio [nuova finestra]   1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   2   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   3    4 <%@Page Language="VB"%>   5 <%@Register TagPrefix="ANet" TagName="Footer" Src="includes/footer.ascx"%>   6    7 <!–   8 # nome: ViewState.aspx   9 # scritto da: Antonio Volpon  10 # data creazione: 22 Novembre 2001 [...]...
  • ASP.NET: Html Server Controls e gli eventi
    Ecco i controlli che consentono di sfruttare la programmazione ad oggetti in ASP.NET e che sono in corrispondenza 1:1 con i tag Html. Il server ASP.NET si preoccuperà di convertirli in puro codice Html, ma il programmatore potrà usarli efficacemente da codice...
  • ASP.NET: Html Server Controls e gli eventi – Codice sorgente dell’esempio
    htmlAnchor.aspx – Prova l’esempio [nuova finestra]   1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   2   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   3    4 <%@Page Language="VB"%>   5 <%@Register TagPrefix="ANet" TagName="Footer" Src="includes/footer.ascx"%>   6    7 <!–   8 # nome: HtmlAnchor.aspx   9 # scritto da: Antonio Volpon  10 # data creazione: 25 Ottobre 2001  11 # ultima modifica: 25 Ottobre 2001  12 # copyright: Antonio Volpon  13 –>  14   15 <script language="vb" runat="server">  16   17 Sub Page_Load(sender [...]...
  • ASP.NET – Programma del corso online
    Il corso si rivolge a chi già realizza siti dinamici (ad esempio utilizzando ASP, JSP, PHP) e desidera capire i vantaggi e le techiche offerti da ASP.NET nonché le differenze rispetto alla tradizionale programmazione sul Web....
  • ASP.NET: Mantenere lo stato – L’evento Page Load e i form Postback
    Corso ASP.NET: seconda puntata Esempio funzionante | Sorgente | Scarica il sorgente (zip) Le pagine ASP.NET sono un’istanza della classe Page, da cui ereditano alcuni eventi. Tra tutti gli eventi, il più usato è Page_Load. È il posto ideale in cui inserire codice che deve comunque essere eseguito ad ogni caricamento della pagina, o una [...]...

Scrivi un commento

Non è possibile inserire commenti per questo intervento.