2012-03-12 20 views
12

Esiste una differenza funzionale tra ViewState in Webforms e ViewBag in MVC? Sembrano essere la "stessa cosa". E può essere usato allo stesso modo. Lo chiedo perché MVC promuove il Web senza stato e non riempie i dati nella pagina provocando prestazioni più lente e lente. Ma sembra che tu possa farlo anche in MVC. Tutto quello che hanno fatto, apparentemente, è solo dargli un nuovo nome.Differenza tra viewbag e viewstate?

risposta

6

ViewState in Web Form stava serializzando i dati dei moduli in un campo nascosto e crittografato nel modulo, quindi i dati potrebbero essere reindirizzati sul postback.

ViewBag/ViewData è un dizionario in cui è possibile inserire dati. Ad esempio, potresti aggiungerlo nel tuo Controller, quindi accedervi nella tua vista. I dati sono dynamic che rende difficile lavorare con i dati. ViewBag non viene inviato al client, fa parte del MVC (pipeline del server).

Entrambi dovrebbero essere evitati.

ViewState da, beh, non utilizzarlo e trovare soluzioni alternative. E ViewBag dovrebbe essere evitato dall'uso di ViewModels.

+1

ViewBag ha il suo posto, ad esempio utilizzando DropDownList e passando a selectlist. Esamina il CRUD MVC Scaffolded: utilizza il ViewBag. La tua affermazione è troppo forte. Forse, i modelli di vista sono preferiti su ViewBag, quando appropriato. vedi http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications – RickAndMSFT

+1

@ Rick.Anderson-at-Microsoft.com - ha acconsentito che la mia dichiarazione può essere forte, ma non nel caso di DropDownList. Il tuo ViewModel può (e dovrebbe) avere una proprietà per il 'SelectList', che può essere associato alla tua vista. Assolutamente non c'è bisogno di ViewBag lì. – RPM1984

+0

Il codice SelectList viene generato dagli strumenti ASP.NET MVC e molti ritengono che sia la scelta giusta per uno scaffolder automatico. – RickAndMSFT

2

ViewBag non viene inviato al client (browser). È puramente qualcosa da usare la transizione dal controller alla vista (che è prima di essere restituito al client).

In MVC, se si ottiene un postback da quella pagina, quindi non si ripristinerà lo "stato", come fa Viewstate, l'unico stato che si ha è qualsiasi cosa si invii al browser e qualsiasi cosa si rinvii.

5

Viewstate viene pubblicato di nuovo insieme al contenuto di un modulo sul server e quindi i valori in esso sono disponibili sul post back. Un viewbag contiene solo i valori in essa contenuti fino a quando la pagina viene pubblicata, quindi il ViewBag viene rimosso dalla memoria. Quindi puoi usare ViewState per mantenere lo stato tra le chiamate, ma non puoi fare lo stesso con un ViewBag.