ViewState Vs Session … mantenimento dell’object tramite il ciclo di vita della pagina

Qualcuno può spiegare la differenza tra ViewState e Session?

Più in particolare, mi piacerebbe conoscere il modo migliore per mantenere disponibile un object (impostando continuamente i membri attraverso i postback) per tutto il ciclo di vita della mia pagina.

Al momento utilizzo Sessioni per farlo, ma non sono sicuro che sia il modo migliore.

Per esempio:

SearchObject searchObject; protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { searchObject = new SearchObject(); Session["searchObject"] = searchObject; } else { searchObject = (SearchObject)Session["searchObject"]; } } 

che mi permette di usare il mio object di ricerca in qualsiasi altro posto sulla mia pagina ma è un po ‘macchinoso dato che devo resettare la mia sessione var se cambio proprietà ecc.

Sto pensando che ci sia un modo migliore per fare in modo che .NET non riattivi l’istanza dell’object ogni volta che la pagina viene caricata, ma la colloca anche nell’ambito globale della class Page?

Se l’object di ricerca non ha dimensioni enormi, segui l’uso di ViewState. Un ViewState è perfetto se vuoi che l’object viva solo per il ciclo di vita della pagina corrente.

Un object di sessione va bene anche per l’uso, ma ovviamente una volta che l’object di ricerca è lì, sarà più a lungo il ciclo di vita della pagina.

Inoltre, una cosa che faccio con gli oggetti ViewState / Session è il loro accesso con una proprietà:

 public object GetObject { get { return ViewState["MyObject"]; } set { ViewState["MyObject"] = value; } } 

Tendo a trovarlo più pulito per farlo in questo modo. Basta modificare il codice sopra per soddisfare le tue esigenze.

  • Fonte 1

  • Fonte 2

Prima di tutto Viewstate è per pagina dove, come la sessione esiste in tutta l’applicazione durante la sessione corrente, se vuoi che il tuo object di ricerca rimanga tra le pagine, la sessione è la strada giusta da percorrere.

In secondo luogo Viewstate viene trasferito come testo crittografato tra il browser e il server con ogni postback, quindi più si memorizza nel Viewstate, più i dati vengono inviati e ritornati dal client ogni volta, mentre la sessione viene archiviata sul lato server e l’unica cosa che va avanti e indietro è un identificativo di sessione, sia come cookie che nell’URL.

Se la sessione o il viewstate è il posto giusto in cui archiviare il tuo object di ricerca dipende da cosa stai facendo con esso e quali sono i dati in esso contenuti, si spera che la spiegazione di cui sopra ti aiuterà a decidere il metodo giusto da usare.

Lo stato della vista è specifico della pagina, dove lo stato della sessione è specifico del browser. Non è ansible passare i dati da una pagina all’altra attraverso lo stato di visualizzazione. Ma lo farai con lo stato della sessione. Ogni sessione ha un ID univoco, dove come stato di visualizzazione memorizzato i dati in campi nascosti nella stessa pagina. Memorizzare i dati sul lato server, dove in stato di visualizzazione dei dati memorizzati nella pagina, quindi rendere la pagina pesante e l’applicazione lenta. Ogni controllo ha lo stato di visualizzazione true per default che memorizza il suo stato (stato di controllo), possiamo abilitarlo o disabilitarlo facilmente facendo enableviewstate = false