08.05.2009

Promuj

Postaram się przeprowadzić małą analizę jednego z mechanizmów przechowywania stanów, jakie dostarcza ASP.NET. Mam nadzieję, że poniższy opis ViewState – jego konstrukcji, sposobu przechowywania i zadań jakie spełnia – pozwoli uniknąć kilku problemów podczas programowania. Starałem się wybrać rzeczy najbardziej istotne, zbudować zwarty „przekrój przez ViewState”. Oczywiście wyczerpanie tematu jest niemożliwe, jednak opis ten stanowić może punkt zaczepienia do dalszych rozważań czy poszukiwań.

ASP.NET udostępnia trzy mechanizmy zapamiętywania stanu. Należą do nich:

Application State

Wspólny dla całej aplikacji obiekt typu HttpApplication, dostępny w każdej chwili przez zmienną Application. Stanowi zbiór obiektów definiowanych przez użytkownika, których czas życia jest taki jak czas życia całej aplikacji. Kolekcja Application dostępna jest od czasu wykonania zdarzenia Application_OnStart – czyli wtedy, gdy po uruchomieniu aplikacji na serwerze pierwszy użytkownik wykona do niej żądanie. [1]

Session State

Wspólny dla danej sesji użytkownika. Jest to instancja klasy HttpSessionState, unikalna dla każdej sesji użytkownika i wspólna dla wszystkich jego żądań. Jest to również kolekcja obiektów, niszczona automatycznie po określonym w Web.config czasie braku aktywności użytkownika. Gdu użytkownik inicjuje żądanie po raz pierwszy, serwer tworzy obiekt Session i wysyła do użytkownika jego unikalny identyfikator. Domyślnie identyfikator ten jest zapisywany w cookies, a gdy te nie są dostępne – doklejany do URL każdej strony. Oczywiście można przełączać aplikację między tymi trybami ustawieniami parametru cookieless w web.config. ASP.NET oferuje trzy metody przechowywania sesji, nie to jest jednak przedmiotem wpisu, dlatego polecam doczytać o trybie InProc, StateServer oraz SqlServer.[2]

View State

Czyli nasz dzisiejszy bohater. ViewState to jedna z wyjątkowych cech ASP.NET. To swoista „umiejętność” zapamiętywania stanu kontrolek na konkretnej stronie. Ten „stan widoku” jest generowany przy pierwszym wczytaniu strony aspx i wysyłany do klienta (przeglądarki) w postaci ukrytego pola o nazwie „__VIEWSTATE”. Pole to można znaleźć na każdej stronie stworzonej w ASP.NET (w różnej formie, ale o tym później).

ViewState jest atrybutem typu StateBag klasy System.Web.UI.Control, z której dziedziczą wszystkie kontrolki (w tym strony – czyli instancje klasy System.Web.UI.Page).

Read more


Przypisy
  1. http://msdn.microsoft.com/en-us/library/bf9xhdz4(VS.71).aspx
  2. http://msdn.microsoft.com/en-us/library/87069683(VS.71).aspx