2012-03-12 56 views
12

WebForm中的ViewState和MVC中的ViewBag之間是否有功能差異?他們似乎是「同一件事」。並且可以以相同的方式使用。我問,因爲MVC推動無狀態網站,並沒有填充頁面中的數據造成膨脹和較慢的表現。但似乎你也可以在MVC中做到這一點。看起來,他們所做的只是給它一個新的名字。viewbag和viewstate之間的區別?

回答

6

ViewState在Web Forms中將表單數據序列化爲表單中隱藏的加密字段,因此可以在回發中重新綁定數據。

ViewBag/ViewData是一個可以「填充」數據的字典。例如,你可以在你的Controller中添加它,然後在你的View中訪問它。數據是dynamic,這使得難以處理數據。 ViewBag不會被髮送到客戶端,它是MVC(服務器管道)的一部分。

兩者都應該避免。

ViewState by,好吧,不使用它並找到解決方法。而ViewBag應該通過使用ViewModel來避免。

+1

ViewBag有它的地方,例如使用DropDownList和傳遞選擇列表。檢查MVC腳手架CRUD - 它使用ViewBag。你的陳述太強烈了。也許,視圖模型比ViewBag更適合。請參閱http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications – RickAndMSFT 2012-03-12 21:47:26

+1

@ Rick.Anderson-at-Microsoft.com - 同意我的聲明可能會很強大,但不是DropDownList的情況。你的ViewModel可以(也應該)有一個'SelectList'的屬性,它可以綁定到你的View中。絕對不需要ViewBag。 – RPM1984 2012-03-12 22:58:24

+0

SelectList代碼由ASP.NET MVC工具生成,大多數人認爲這是自動腳手架的正確選擇。 – RickAndMSFT 2012-03-14 02:16:24

2

ViewBag不會發送到客戶端(瀏覽器)。它純粹是使用從控制器到View的轉換(在將其發送回客戶端之前)。

在MVC中,如果你從該頁面得到回發,那麼你不會恢復你的「狀態」,就像Viewstate一樣,你擁有的唯一狀態是你發送給瀏覽器的任何內容,以及你發回的任何內容。

5

Viewstate隨表單內容一起發佈回服務器,因此在回發時可以使用它的值。一個viewbag只保存其中的值,直到頁面被提供,然後從存儲器中刪除ViewBag。因此,您可以使用ViewState在呼叫之間保持狀態,但不能對ViewBag執行相同的操作。

相關問題