ViewStateMode in ASP.NET 4.0: come controllare il ViewState

di Marco De Sanctis, in ASP.NET 4.0,

Il ViewState semplifica di molto lo sviluppo di applicazioni web, consentendoci di mantenere lo stato dei controlli in pagina nel corso di vari postback, superando quindi il limite imposto dalla natura stateless del protocollo HTTP.

Purtroppo è molto facile anche abusarne, tipicamente lasciandolo attivo anche quando le nostre pagine effettivamente non ne hanno la necessità, complice anche una certa difficoltà nel gestirne l'attivazione in maniera selettiva tra i vari controlli, quantomeno nelle versioni di ASP.NET precedenti alla 4.0.

In passato, infatti, era possibile disabilitare il ViewState solo tramite la proprietà EnabledViewState, mantenendolo attivo a livello di pagina e disabilitandolo selettivamente dove non necessario, operazione che risultava verbosa e difficilmente controllabile.

ASP.NET 4.0 propone invece un nuovo modello, grazie alla nuova proprietà ViewStateMode della classe Control, che modifica radicalmente il comportamento precedente. Essa ammette i seguenti tre valori:

  • Enabled abilita il ViewState per il controllo e per i suoi child, anche nel caso in cui il suo parent abbia il ViewState disabilitato;
  • Disabled disabilita il ViewState per il controllo e per i suoi child, anche nel caso in cui il suo parent abbia il ViewState abilitato;
  • Inherit è il valore di default, e rappresenta la logica valida fino ad ASP.NET 3.5Sp1, in cui cioè ogni controllo eredita l'abilitazione del ViewState dal suo parent;

Grazie a ViewStateMode, è a questo punto possibile lasciare disabilitato il ViewState a livello di pagina (o addirittura di applicazione, agendo su Web.Config) e attivarlo in maniera esplicita solo dove necessario, garantendoci quindi un maggiore e immediato controllo su questa funzionalità.
Consideriamo l'esempio seguente:

<%@ Page Language="C#" ViewStateMode="Disabled" ... %>
  ...
  <asp:Label runat="server" ID="labelEnabled" ViewStateMode="Enabled" />
  <asp:Label runat="server" ID="labelDisabled" />
  <asp:Button runat="server" ID="btn" Text="postback" />

La pagina realizzata presenta il ViewState disabilitato a livello globale e contiene due Label, una delle quali ha la proprietà ViewStateMode pari a Enabled; al load della pagina esse vengono valorizzate solo nel caso in cui non ci si trovi nell'ambito di un postback:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        this.labelDisabled.Text = "ViewState disabled";
        this.labelEnabled.Text = "ViewState enabled";
    }
}

Scatenando un postback tramite il button, possiamo notare come solo labelEnabled mantenga la stringa impostata, e ciò è possibile perché è l'unica delle due per cui il ViewState è effettivamente attivo.

Per approfondire:
Le novità di ASP.NET 4.0
https://www.aspitalia.com/articoli/asp.net4/introduzione.aspx

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

I più letti di oggi