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:
- elementi Form come
<input>
(e conRequest.Form[c.UniqueID]
questo può essere evitato ancora) - 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.
Inoltre: http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx è una lettura divertente – Patrick