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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Taggare la output cache in base al routing in ASP.NET Core
Definire le impostazioni di cache a livello di controller in ASP.NET Core 7
Gestire tipi complessi in query string grazie a IParsable in ASP.NET Core 7.0
Sfruttare la local cache del browser tramite gli ETag in ASP.NET Core
Raggruppare i parametri di una minimal API in un singolo oggetto in ASP.NET Core
Sfruttare l'output cache di ASP.NET Core 7 con i controller
Migliorare la scalabilità di ASP.NET Core 7 grazie all'output cache
Migrare un progetto ASP.NET Core da .NET 6 a .NET 7
Usare ASP.NET Core dev tunnels per testare le applicazioni su internet
Gestire dati sensibili nella configurazione in ASP.NET Core
Impostare il forward degli header in un sito ASP.NET Core dietro a un reverse proxy
Cache policy su route groups di Minimal API in ASP.NET Core 7
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- .NET Conference Italia 2022 - Milano e Online
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!