Back to "ASP.NET 4.0: ViewStateMode...ger dig mer kontroll över ViewState!"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

Imported mostlylucidcouk

ASP.NET 4.0: ViewStateMode...ger dig mer kontroll över ViewState!

Thursday, 18 February 2010

ViewState är en smärta ... där, Jag har sagt det! Vad som orsakar mest smärta med ViewState är det faktum att människor missbrukar det en hel del, lämnar det aktiverat för varje kontroll på en sida när i själva verket du bara verkligen behöver det för att en kontroll som verkligen behöver för att framhärda det har innehåll till nästa sida. Dave Reed Ordförande en utvecklare på ASP.NET laget har skrivit ett verkligt episkt inlägg om "Sannolikt förstående stat", och innan du läser vad som kommer härnäst, borde du verkligen gå iväg och läsa det först

Tillbaka?

Ok, ja nu förstår du att du bara bör använda ViewState för de kontroller som faktiskt behöver det. Men det finns ett problem ... vad du verkligen vill göra är att stänga av ViewState för en hel sida sedan bara slå på den igen för de kontroller som behövs, Ledsen men jag har några dåliga nyheter, du kan inte göra detta i någon version av ASP.NET upp till och med ASP.NET 3.5 SP1. Jag har också några goda nyheter ... du kommer att kunna göra detta när ASP.NET 4.0 kommer ut! Den magiska lilla egendom på alla ASP.NET Kontroller som låter dig göra detta kallas ViewStateMode. (Offentligen var detta Andra slag, med runt tvärsnitt, av järn eller stål, med en bredd av mer än 600 mm idé och proverna nedan är en skamlös rip-off från honom :-)))

Enkelt uttryckt, ViewStateMode har 3 möjliga värden, Aktiverad, Inaktiverad och ArvVilket är ganska uppenbart i deras funktion...Aktiverad Vänder spara ViewState på för den kontrollen (eller alla barn kontroller som är satta som "ärvda" eller har ingenting satt), Inaktiverad Stäng av den igen, och Arv säger "använd vad min förälder är inställd på. Det är verkligen allt som finns till det!

Här är ett mycket enkelt exempel på hur detta faktiskt fungerar:

<formulär id="form1" runat="server">

<skript runat= på servern>

skyddat upphävande av OnLoad (EventArgs e) {

Om (!IsPostBack) {

etikett1.Text = etikett2.Text = "[Dynamisk värde]"

}

Base.OnLoad(e).

}

</skrift>

<asp:PlaceHolder ID="PlaceHolder1" runat="server" ViewStateMode="Inaktiverad">

Inaktiverad: <Asp:Label ID="Label1" runat="server" Text="[Deklarerad värde]" /><(se bilaga I till förordning (EU) nr 1094/2010)>

<asp:PlaceHolder ID="PlaceHolder2" runat="server" ViewStateMode="Enabled">

Aktiverad: <Asp:Label ID="Label2" runat="server" Text="[Deklarerad värde]" />

</asp: PlaceHolder>

</asp: PlaceHolder>

<(se bilaga I)>

<Asp: knapp-ID="Button1" runat="server" Text="Postback" />

Som du kan se i detta prov är vi inaktivera ViewState för PlaceHolder1 kontroll, barnet etikett1 Ärver denna egenskap (som arv är standard) och därför sparar ingen ViewStateI PlaceHolder2 ställer vi ViewStateMode till ‘Enabled.', vilket leder till etikett2 ärver denna egenskap och därför sparar ViewStatePå första sidan laddar vi båda etiketter till utdata texten [Dynamisk värde]

Effekten av allt detta är att när sidan först laddar ser du etiketterna återges enligt följande:

Inaktiverad: [Dynamisk värde]

Aktiverad: [Dynamisk värde]

Men gör en PostBack och du ser:

Inaktiverad: [Deklarerad värde]

Aktiverad: [Dynamisk värde]

Som ni nu förväntar er, den första etiketten har inte bevarat värdet vi satt in i ViewState den andra etiketten har!

Vad som verkligen är coolt är det faktum att du också kan göra detta:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" ViewStateMode="Inaktiverad" %>

Kom ihåg, i WebForms Page är bara en annan kontroll ... det fungerar som föräldrakontroll för varje annan kontroll på sidan. Det innebär att ingen kontroll kommer att spara ViewState om du inte ställer in VisaStateMode att aktivera för den kontrollen eller en kontroll längre upp i kontrollhierarkin (så, en stor användning skulle vara för ContentPlaceHolders i MasterPages...).

Jag sa ju att det var enkelt!

logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.