ASP.NET 4.0: ViewStateMode... dando più controllo su ViewState! (Italiano (Italian))

ASP.NET 4.0: ViewStateMode... dando più controllo su ViewState!

Thursday, 18 February 2010

//

3 minute read

VisualizzaState è un dolore... là, l'ho detto! Ciò che causa più dolore con ViewState è il fatto che le persone abusano molto, lasciandolo abilitato per ogni controllo in una pagina quando in realtà è solo davvero bisogno di esso per quel controllo che ha davvero bisogno di perseverare nei contenuti della pagina successiva. Dave Reed uno sviluppatore sul team ASP.NET ha scritto un post davvero epico su Visualizza lo Stato in base alla verità, e prima di leggere quello che viene dopo, dovresti davvero andare via e leggere prima

Indietro?

Ok, bene ora si capisce che si dovrebbe utilizzare VisualizzaState solo per quei controlli che effettivamente ne hanno bisogno. Ma c'è un problema ... quello che si è veramente piace fare è disattivare ViewState per un'intera pagina poi solo accenderlo di nuovo per i controlli che ne hanno bisogno, Spiacente, ma ho alcune cattive notizie, è possibile farlo in qualsiasi versione di ASP.NET fino a e compreso ASP.NET 3.5 SP1. Ho anche alcune buone notizie ... sarete in grado di farlo quando ASP.NET 4.0 esce! La piccola proprietà magica su tutti i controlli ASP.NET che consente di fare questo si chiama ViewStateMode. (Incidentalmente, questo era Dave solani n.c.a. idea e i campioni qui sotto sono uno spudorato strappo da lui :-))

Detto molto semplicemente, ViewStateMode ha 3 valori possibili, Abilitato, Disabilitato e EreditarioChe sono piuttosto evidenti nella loro funzione...Abilitato attiva il salvataggio di VisualizzaState per tale controllo (o qualsiasi controllo figlio che sia impostato come "Inherit" o che non abbia nulla impostato), Disabilitato spegnerlo di nuovo, e Ereditario dice di usare tutto ciò che il mio genitore è impostato su di esso. Questo è davvero tutto ciò che c'è ad esso!

Qui si tratta di un campione molto semplice di come questo funziona effettivamente:

<form id="form1" runat="server">

<script runat=Server=Server=Script runat=Script runat>

override vuoto protetto OnLoad(EventArgs e) {

if (!IsPostBack) {

label1.Text = label2.Text = "[DynamicValue]";

}

base.OnLoad(e);

}

</script>

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

Disabilitato: <asp:Label ID="label1" runat="server" Text="[Valore dichiarato]" /><br />

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

Abilitato: <asp:Label ID="label2" runat="server" Text="[Valore dichiarato]" />

</asp:PlaceHolder>

</asp:PlaceHolder>

<ora />

<asp:button ID="Button1" runat="server" Text="Postback" />

Come puoi vedere in questo esempio noi disattiviamo VisualizzaState per il controllo di PlaceHolder1, l'etichetta figlio1 eredita questa proprietà (come è predefinita Inherit) e quindi non salva VisualizzaStatutoIn PlaceHolder2 selezioniamo VisualizzaStatutoModalità a <Enabled >, che porta ad etichetta2 ereditando questa proprietà e quindi salva VisualizzaStatutoSulla prima pagina di carico selezioniamo entrambe le etichette per l'output del testo [DynamicValue]

L'effetto di tutto questo è che, quando la pagina carica per la prima volta si vedono le etichette rese come segue:

Disabilitato: [DynamicValue]

Abilitato: [DynamicValue]

Ma, fare un PostBack e si vede:

Disabilitato: [Valore dichiarato]

Abilitato: [DynamicValue]

Come vi aspettavate, la prima etichetta hasn hasn ha preservato il valore che abbiamo impostato in ViewState la seconda etichetta ha!

Ciò che è veramente cool è il fatto che si può anche fare questo:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Predefinito" VisualizzaStateMode="Disabilitato" %>

Ricorda, in WebForms Page è solo un altro controllo ... agisce come il controllo genitore per ogni altro controllo nella pagina. Ciò significa che nessun controllo salverà ViewState a meno che non si imposta ViewStateMode ad Abilitato per quel controllo o un controllo più in alto la gerarchia di controllo (quindi, un grande uso sarebbe per ContentPlaceHolders in MasterPages ...).

Te l'avevo detto che era semplice!

Finding related posts...
logo

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