2011-11-30 55 views
6

我在我的MVC應用程序中大量使用ViewBag,這是否被認爲是不好的做法?我不確定是否花時間創建ViewModels(但我認爲這更適合MVVM而不是MVC)或繼續大量使用ViewBag。有什麼爭論和反對呢?例如控制器方法將返回它的模型(通常是一個簡單的域實體)以及下面的調用到ViewBag:大量使用ViewBag

  ViewBag.TotalItems = data.Count(); 
     ViewBag.FilteredItems = gridFilters; 
     ViewBag.Action = "Events"; 
     ViewBag.Area = "People"; 
     ViewBag.EntityID = person.EntityID; 
     ViewBag.OrganisationID = ID; 
     ViewBag.Name = string.Format("{0} {1}", person.FirstName, person.LastName); 
     ViewBag.IsEnabled = person.IsEnabled; 
     ViewBag.EntityID = person.EntityID; 
     ViewBag.Favourited = users.IsOnUserFavourites(person.EntityID); 

     ViewBag.Columns = userColumns; 

     ViewBag.Title = "Person : " + string.Format("{0} {1}", person.FirstName, person.LastName) + " - Events"; 

回答

9

像這樣的問題通常會從籬笆的兩側得到答案。很多人覺得像這樣使用ViewBag是一個糟糕的設計(包括我自己)。它使你的控制器不易測試。您的意見不是強類型,等等。

使用ViewModel通常是一個好習慣。不要讓你的模型成爲一個領域模型,而要創建一個特定於你所顯示的視圖的模型。這樣,它可以100%定製,以滿足您對此特定視圖的需求。一旦你這樣做,你會發現你並不需要使用ViewBag。它有時可以創建很多額外的代碼(每個視圖一個視圖模型),但代碼非常簡單,對一個視圖進行更改不會破壞其他視圖。

+0

謝謝,這幾乎是我所期待的。 – Paul

+0

再一次,請記住像這些問題是非常主觀的。對你有用的東西可能不適用於其他人,對他人有用的東西可能不適合你。我只是從我自己的角度回答:) – Dismissile

0

爲什麼不使用的人作爲你的模型?這樣你可以使用強類型的視圖。我個人的觀點是ViewBag幾乎是'魔術串',雖然它在小規模工作很好,但在大型應用程序和項目中,您幾乎要迫使每個人都記住所有的魔術串。此外,您沒有獲得使用模型和強類型視圖的類型安全性。