2009-09-09 63 views
3

我有關於保持控制器和視圖分離的問題。在我看來,控制器應該只傳遞一個模型到視圖中,視圖決定如何顯示模型。這樣,控制器和模型就會保持分離,並且可以獨立開發。然而,我在網上看到很多教程,甚至在Pro ASP.NET MVC框架書中,我看到很多使用ViewData [「string」]或TempData [「string」]的示例。通過使用強類型對象保持控制器和視圖分離

這不會引入兩個問題嗎?第一個是視圖現在有點與控制器耦合,因爲它必須知道控制器在ViewData/TempData中設置的字符串的名稱。其次是這些是鬆散類型的,這意味着沒有智能感知。如果我正在開發控制器,我不能僅僅告訴另一位開發視圖的開發人員爲模型使用Intellisense,我必須給他指定字符串的名稱,如果我更改了字符串名稱,那麼我在視圖中也必須改變它。

我想最終我要問的是,這是正確的嗎?或者我不理解什麼?

回答

4

查看數據是在視圖和控制器之間傳遞信息的方式之一,但正如您所說,它沒有智能,它增加了耦合。相反,你應該考慮使用ViewModel。有關使用ViewModel的方式以及ViewDate vs ViewModel的優缺點,請參閱Scott Gu NerdDinner example(免費提供)。

我希望這會有所幫助。

+1

感謝您的回答!你們所有人基本上都說過同樣的事情,但不幸的是,我只能將其中一個標記爲答案,所以我將它交給了聲譽得分最低的人。 – 2009-09-09 02:38:45

+0

非常感謝幫助新手! – 2009-09-09 02:48:20

1

是的你是對的,創建一個通常稱爲ViewModel的類被視爲最佳實踐,該類被髮送到視圖中或被View中使用。 ViewModel通常包含模型以及視圖可能需要的任何其他數據,例如分頁列表視圖的頁碼或要顯示的視圖列表的值。

2

我認爲教程和書籍正在使用這種方法來嘗試使事情更容易開始。不過,我認爲這可能會引發一些不好的習慣,正如你所建議的那樣。

我這樣做後,它大致依據的方式這article by Jimmy Bogard

  • 所有的意見都強類型
  • 按次一個具體ViewModel類
  • 視圖決定哪些數據是在視圖模型

我不像他那樣使用Auto-Mapper。我通常使用實用程序方法將我的Model對象轉換爲關聯的ViewModel對象。

相關問題