ViewState o HiddenField
-
05-07-2019 - |
Domanda
Se ho un semplice pezzo di dati da memorizzare (un intero o una stringa per esempio) potrei scegliere di memorizzarlo in ViewState o usando un controllo HiddenField.
Perché dovrei scegliere l'uno rispetto all'altro?
ViewState
- Difficile da decodificare per l'utente (ritenuto impossibile), il che potrebbe essere desiderabile
HiddenField
- Il valore può essere utilizzato in JavaScript
Ci sono altri pro e contro?
Soluzione
Non proprio, ViewState è effettivamente memorizzato in un campo nascosto, quindi l'unica vera differenza è la codifica.
A meno che non sia necessario manipolare il valore con JavaScript o sperare di disattivare ViewState su questa pagina del tutto, utilizzare ViewState. Principalmente solo perché esistono strumenti di terze parti ( come questo ) che comprendono ViewState e che hanno vinto capire il tuo campo nascosto personalizzato.
Altri suggerimenti
Da un punto di vista della manutenibilità, userei ViewState. Scrivere meno codice significa ridurre i punti di errore del software. Significa anche che qualsiasi sviluppatore che verrà dopo di te avrà più tempo a mantenere la soluzione.
Se non ti senti completamente a tuo agio con questo, scrivi un accedente sulla pagina che funge da facciata per recuperare il valore dal ViewState. In seguito, se ti senti obbligato a convertirlo in un campo nascosto, l'accessor può gestire questo interruttore apparentemente per il resto del codice. Assicurati solo di documentare le tue ragioni per farlo.
ViewState è memorizzato nella pagina stessa, quindi aumenta le dimensioni della pagina e può causare problemi di prestazioni .
Inoltre possiamo configurare l'applicazione per salvare il viewstate sul server piuttosto che sulla stessa pagina che potrebbe proteggere da alcuni problemi di sicurezza.
Jomit
I campi nascosti sono invisibili nella pagina e i loro valori possono essere visualizzati nella sorgente della vista ma il valore di view-state è codificato e non è leggibile.
I valori dei campi nascosti sono pubblicati nella pagina successiva. (Nota: utilizzare server.transfer per ottenere il valore dei campi nascosti).
Viewstate è valido solo sulla pagina in cui ti trovi o su cui stai postando. Con un campo nascosto è possibile accedere ai dati nella pagina successiva a cui si accede (così come altri dati) utilizzando il metodo PreviousPage dell'oggetto Page in questo modo:
string term = ((TextBox)Page.PreviousPage.FindControl("txtSearchTerm")).Text;