Shadowed: ViewState sluzi da se neki podatak sacuva izmedju dva poziva strane.
Razlog za njegovo postojanje je to sto, nakon sto se stranica jednom posalje, nemamo nikakvu vezu sa njom pa moramo nekako da sacuvamo stanje koje smo imali na serveru da bismo mogli da ga rekonstruisemo kada se strana ponovo ucita (ViewState je jedno od resenja tog problema).
Primer:
Imas Label-u: <asp:Label Text="Primer" />
I imas neki Button na ciji klik hoces da uradis nesto sa tim tekstom.
Kada se stranica prvi put ucita, ta labela ce se renderovati u.. ne secam se, recimo <span>Primer</span> i to ce se poslati klijentu. Problem je u tome da mi vise nemamo nikakvu informaciju o Labeli. Ne mozemo mi span da konvertujemo nazad u labelu iz (vise razloga, pre svega, nece nam na server ni doci taj span, drugo i da dodje, ne znamo da li je on bio labela ili plain html itd.).
Zbog toga postoji jedno <input type="hidden" name="__VIEWSTATE" /> polje u kojem se smestaju informacije o toj labeli pa kada se uradi ponovno ucitavanje strane, server iz tog podatka rekonstruise Label objekat.
Treba imati na umu da se <input> polja salju samo kada se uradi submit forme, pa tako i ViewState. Da li je to slucaj se proverava sa Page.IsPostback.
Problem sa ViewState-om je sto ukoliko imas mnogo podataka koji se cuvaju u njemu povecavas kolicinu podataka koje setas izmedju klijenta i servera pa to moze da uspori ucitavanje strana, trosi serverske resurse i protok.