Asp.Net ViewState
Här är en bra artikel som förklarar ViewState i Asp.Net.
http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx
Det mest intressanta:
- De flesta kontroller sparar sina properties i ett fält som heter ViewState.
- Initialt håller kontrollen inte koll på förändringar i ViewState.
- Efter det att en kontroll har börjat att hålla koll på sitt ViewState, eller spåra förändringar av ViewState (dålig översättning av tracking ViewState) så kommer ändrade properties att markeras som dirty. Det är endast dessa properties som kommer att serialiseras ner till det dolda
__VIEWSTATE
fältet. - En kontroll börjar spåra förändringar av ViewState efter sin
OnInit
. - Sidans
OnInit
anropas efter alla kontollers, så vid det laget så spårar alla kontroller förändringar av sina ViewState. - Data som binds under sidans
OnInit
ochOnLoad
, t.ex. iPage_Load
, kommer att serialiseras och skickas till klienten i__VIEWSTATE
, eftersom kontrollerna spårar förändringar av ViewState. Detta innebär; Sätt inte properties på kontroller efter sidansOnInit
om du inte vill att det ska hamna i__VIEWSTATE
. - Properties på kontroller som sätts under sidans
OnPreInit
, dvs. innan kontrollerna börjat spåra förändringar av ViewState, kommer inte att hamna i__VIEWSTATE
. Detta kan utnyttjas till att fylla kontroller med data som är billigt och enkelt att hämta vid varje postback, istället för att roundtrippa datat via klienten. - När du skapar kontroller via kod, t.ex. i metoden
CreateChildControls
i en custom control ellerCompositeControl
) så se till att sätta alla defaultvärden för properties innan du lägger till kontrollen iControls
.
Innan du lägger till den så svävar kontrollen så att säga fritt i luften. Den känner inte till något om omvärlden och och "ingen" har fått den att börja spåra förändringar av ViewState. Efter det att du lagt till den iControls
finns det risk att kontrollen direkt efterAdd
-anropet kommer börja spåra förändringar (en kontroll som skapas sent i en sidan lifscykel får nämligen springa ikapp övriga kontroller och kommer därför direkt att raskt knata igenom alla events och så).
Inga kommentarer:
Skicka en kommentar