2012-08-31 11 views
5

Scrivo un sacco di controlli ASP.NET generici e una cosa che non riesco a capire è quando memorizzare i valori in viewstate e quando assumere è OK a non farlo.Come decidere cosa memorizzare in viewstate?

Da un lato, ha senso memorizzare l'intero stato del controllo in ViewState, incluse le proprietà quali:

  • valori della casella di testo immessi dall'utente (o qualsiasi dato formulario)
  • Opzioni di configurazione come altezza o dimensione della pagina
  • Anche il modo in cui è stato composto il controllo, ad esempio la memorizzazione di tutti i dati da cui è stata creata una griglia, o la griglia stessa.

prestazioni Ignorando, più si può spingere nel ViewState e meglio è, perché significa che il controllo si comporterà esattamente gli stessi in tutta postback e mai "accidentalmente" ripristinare un valore o "dimenticare" è stato disabilitato. Ma viewstate non è gratuito. Memorizzare tutto significa che il controllo ora produrrà sia l'HTML che tutte le sue proprietà interne per creare quell'HTML, che quasi sempre raddoppierà l'output.

La mia domanda non riguarda le prestazioni, ma la strategia. Su quali criteri decido di inserire una proprietà in viewstate? Stavo pensando qualcosa in questo senso:

Se l'utente non può modificare una proprietà, il server sarà sempre impostato in modo esplicito, quindi è OK per lasciarlo fuori ViewState. Anche per qualcosa come color=red, l'utente non imposta direttamente questa proprietà; faranno clic su un pulsante altrove che imposta indirettamente questa proprietà. Quel pulsante o il suo proprietario dovrebbero mantenere lo stato, non il controllo che rende il colore rosso.

Questa logica implica che le uniche proprietà che dovrebbe andare in viewstate sarebbero:

  1. elementi Form come <input> (e con Request.Form[c.UniqueID] questo può essere evitato ancora)
  2. proprietà che l'utente può controllare in modo interattivo direttamente sul controllo.

Questa logica ha senso? Sembra debole e mi piacerebbe sentire di più dagli esperti.

+1

Inoltre: http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx è una lettura divertente – Patrick

risposta

4

Utilizzare ViewState per le operazioni non necessarie al funzionamento del controllo.

Utilizzare ControlState per le operazioni necessarie affinché il controllo funzioni anche se ViewState è disabilitato.

I valori iniziali e la gerarchia di controllo (anche i controlli html) vengono compilati in file ASP.NET temporanei quando viene richiesta per la prima volta la pagina. Quindi non hanno bisogno di essere archiviati ovunque quando non vengono mai cambiati (e anche ViewState non li salverà).

Un controllo memorizza solo le proprietà in ViewState che sono state modificate durante il ciclo di vita della pagina (dal TrackViewState). Un controllo che è stato modificato è "sporco". Ad esempio se si modifica TextBox1.Text in page_load, ViewState.IsItemDirty("TextBox1.Text") restituirebbe true. Questi valori saranno memorizzati in ViewState.

Look here e here. (Consiglio vivamente di leggere i due articoli)

Control State vs. View State Example

0

Penso che tu abbia ragione ad essere preoccupato per lo stato di visualizzazione, ma quali altre opzioni sono disponibili? Se non memorizzi i tuoi dati variabili lì, dove lo metti? (Potresti considerare di rimuovere alcuni elementi di configurazione, forse non lasciare che l'utente modifichi così tante proprietà).

3

Controllare questo articolo su MSDN che copre quando, dove e cosa utilizzare la pletora di opzioni di gestione dello stato disponibili in ASP.NET sezione stato di visualizzazione è pubblicato sotto per convenienza - verifica la richieste contro i vantaggi e gli svantaggi dovrebbe guiderà in utilizzo su un caso per caso:

intero articolo qui: http://msdn.microsoft.com/en-us/library/z1hkazw7(v=vs.100).aspx

Viewstate Estratto:

View State

pagine Web Form forniscono la proprietà ViewState come una struttura integrata per mantenere automaticamente i valori tra più richieste per la stessa pagina . Lo stato di visualizzazione viene mantenuto come campo nascosto nella pagina. Per ulteriori informazioni su , vedere Panoramica sulla gestione dello stato di ASP.NET.

È possibile utilizzare lo stato di visualizzazione per memorizzare i propri valori specifici della pagina attraverso i viaggi di andata e ritorno quando la pagina torna a se stessa. Ad esempio, se l'applicazione mantiene le informazioni specifiche dell'utente, ovvero le informazioni utilizzate nella pagina ma non fanno necessariamente parte di qualsiasi controllo, è possibile memorizzarle nello stato di visualizzazione.

I vantaggi di utilizzare lo stato di visualizzazione sono:

Nessun server risorse sono richieste Lo stato di visualizzazione è contenuto in una struttura all'interno del codice pagina.

Implementazione semplice Lo stato di visualizzazione non richiede alcuna programmazione personalizzata da da utilizzare. Per impostazione predefinita, è attivo per mantenere i dati di stato sui controlli .

Funzioni di sicurezza avanzate I valori in stato di visualizzazione sono sottoposti a hash, compressi e codificati per implementazioni Unicode, che forniscono una sicurezza maggiore di rispetto ai campi nascosti.

Svantaggi dell'uso stato di visualizzazione sono:

considerazioni prestazioni poiché lo stato di visualizzazione viene memorizzato nella pagina stessa, memorizzazione di valori di grandi dimensioni possono causare la pagina a rallentare quando agli utenti di visualizzare e quando postano esso. Questo è particolarmente rilevante per per dispositivi mobili, dove la larghezza di banda è spesso una limitazione.

Limitazioni del dispositivo I dispositivi mobili potrebbero non avere la capacità di memoria per memorizzare una grande quantità di dati sullo stato di visualizzazione.

Potenziali rischi per la sicurezza Lo stato della vista è memorizzato in uno o più campi nascosti nella pagina. nascosti. Sebbene lo stato di visualizzazione memorizzi i dati in un formato hash , può ancora essere manomesso. Le informazioni nel campo nascosto possono essere visualizzate se la sorgente di output della pagina viene visualizzata direttamente, creando un potenziale problema di sicurezza. Per ulteriori informazioni, vedere ASP.NET Applicazioni Web Security and Basic Security Practices per Web Applicazioni.

Problemi correlati