2009-07-13 44 views
0

我在StackOverflow和別處討論過將多個實體中的數據彙集到一個強類型視圖的各種方法,這些方法是使用ViewData對象或構造一個新的自定義類利用兩個實體。傳遞ViewData與創建新類

對我來說,如果您代表某種新的混合實體,您似乎想要創建一個新類並將其視爲如此。但是,如果您傳遞的數據不是您正在使用的實體的一部分,但仍在您的模型中,例如下拉列表或其他用戶界面,那麼我可以看到使用視圖數據的原因元素。

由於各種原因,我看到有人主張這個或那個,我想知道是否有什麼規則可以相互使用嗎?

回答

8

一旦我與鍵入的ViewDataModels一起去。我從來沒有需要將東西放入ViewData Dictionary中,並在View中使用魔術字符串。神奇的琴絃感覺很髒,很容易出錯。

我一般做的是創建一個ViewDataModel類爲我所有的控制器,即:

  • 的HomeController
  • HomeModel
  • HomeViewDataModel
  • 首頁的ActionResult View頁面。

所有這些* ViewDataModel的擴展了一個公共ViewDataModel類,對全球站點配置數據傳遞到有益的意見。

我真的不在乎我放在那個ViewDataModel中。如果我需要它,我將它作爲一個屬性並在需要時填充它,無論這是一些LINQ to SQL類還是一個任意的菜單配置類。

即使您不需要模型對象以外的其他屬性,稍後添加屬性也比重新鍵入視圖更容易。相當多的我的ViewDataModel類包含1個屬性,但知道我可以添加更多而不需要重構任何東西是一種幸福。

我經常認爲ASP.NET MVC是ASP.NET MVVM,作爲將模型和垃圾(?)數據傳輸到視圖中的傳輸器ViewDataModel類起着巨大的作用。

0

我不確定創建ViewModel對象的真正好習慣是什麼時候只有模型返回。它只是創建更多的對象來垃圾收集的服務器。我認爲使用ViewModel是很好的,但只有在你需要的時候。但我同意必須避免魔術串的事實。它會產生較弱的代碼,以後難以維護。