La gestione dello stato attraverso ViewState agevola molto gli sviluppatori in quanto non debbono più doversi salvare le informazioni inserite nella pagina con artifici di vario genere (che i programmatori ASP ben conoscono).
Per default, VS.NET abilita questo meccanismo rendendo tutti i controlli ViewState enabled. Se da un lato è molto positivo, dall'altro bisogna prendere alcune precauzioni. Ci sono un paio di circostante nelle quale il ViewState non è, a parer mio, la scelta ottimale. La prima, più evidente, quando il controllo (es. DataGrid, DataList, Repeater, DropDownList, ecc.) contiene molti dati. Si pensi ad esempio ad una DropDownList con 100 elementi. Se abilitiamo il ViewState troveremo questi 100 elementi in due punti differenti della pagina, come lista di elementi HTML e nel ViewState (in forma base 64).
Un'altro caso, conseguenza del primo, è quando abbiamo controlli (contenenti liste di dati) duplicati nella pagina. Si pensi ad esempio ad una DataGrid contenente un campo che è una DropDownList con tutte le nazioni del mondo. Diventa evidente la propagazione della ridondanza (si arriva tranquillamente a pagine di oltre 200Kb).
Un'alternativa è disabilitare il ViewState. Questa scelta impone allo sviluppatore di evvettuare il binding ad ogni caricamento della pagina. Se per caricamento della lista ci appoggiamo ad un database allora l'effetto risultante potrebbe essere peggiore di quello con il ViewState. Pertanto è auspicabile tenere queste liste (di solito di lookup) in Cache (HttpContext.Current.Cache) affinchè non si debba pagare la latenza della connessione al database.