vanlig myt-viewstate

De flesta ASP.NET utvecklare tycker att ASP.NET ViewState kan hålla värdena av kontroller såsom textrutor så att de blir kvar även efter postback.

Så är inte fallet!

Låt oss ta ett exempel för att förstå ovan:

Placera en webbserver textrutekontroll (tbControl) och en webbserver Label-kontrollen (lblControl).
Ställ in “Text” egendom etiketten och textrutan “Ursprunglig Label Text” och “Initial TextBox Text” respektive och ställ in “EnableViewState” egendom av båda kontrollerna till False.
Placera två knappkontrollerna och ställa sin text till “Ändra etikettext” och “Lägg till server”. Första knappen ändras etikettens text genom att hantera knapptryckning händelsen och andra knappen gör bara postback.

private void btnChangeLabel_Click (objekt avsändare, System.EventArgs e)
{
lblControl.Text = “etikettens text Changed”;
}

På kör denna applikation, kan du se de ursprungliga texterna i de kontroller som du har ställt in. Nu, ändra texten i ruta och ställ in den på “Changed TextBox Text”.
Nu klickar du på Skicka till server-knappen.

Vad som händer är att textrutan behåller sitt värde, trots den ViewState egenskapen sätts till false!

Anledningen till detta beteende är att ViewState är inte ansvarig för att lagra de modifierade värden för kontroller som textrutor, menyerna, CheckBoxList osv, det vill säga de kontroller som ärver från IPostBackDataHandler gränssnittet. Efter Page_Init (), det är en händelse som kallas LoadViewState, där Page klassen läser in värden från den dolda __ Viewstate från fältet för dessa kontroller (t.ex. Label) vars ViewState är aktiverat.

Då LoadPostBackData händelse bränder, där Page klassen läser in värdena för dessa kontroller som ärver från IPostBackDataHandler gränssnittet (t.ex. TextBox) från HTTP POST rubriker.
På att klicka på “Ändra etikettext” knappen som ändrar etikettens text programmässigt (gjord av ovan nämnda händelsehanterare) och sedan klicka på “Skicka till servern”, på sidan laddar och programmatisk förändring är förlorad, dvs förändringar etikettens text till startvärde – “Initial Label text “. Detta beror på att i Label-kontrollen inte ärver från IPostBackDataHandler gränssnittet. Så ViewState ansvarar för ihållande dess värde över postbacks.

Också sedan ViewState har inaktiverats, förlorar Label sitt värde efter att ha klickat på “Ändra Label text”-knappen.

Nu aktivera ViewState för Label-kontrollen, och du kan se det ändrade värdet (“etikettens text Changed”) efter att ha klickat på samma knapp. Så här hjälper oss att dra slutsatsen att kontroller som ärver från IPostBackDataHandler gränssnittet behåller sina värden även om ViewState har inaktiverats. Detta beror på att värdena är lagrade i HTTP POST rubriker.