2012-02-27 65 views

回答

3

如果你已經有了一個強類型的視圖,你真的甚至不應該考慮ViewBag/ViewData。一旦你強類型視圖視圖模型所有你必須在這個觀點做的是使用該視圖模型的屬性,就像這樣:

@foreach (viewModel vm in Model.SomeSubModels) 
{ 
    //some foo bar 
} 

,甚至更好,避免在您的看法可怕foreach循環(如果你需要編輯一些屬性),你可以使用使用編輯器模板:

@Html.EditorFor(x => x.SomeSubModels) 

或使用顯示器模板(如果你只想要顯示給用戶的視圖模型屬性的值):

@Html.DisplayFor(x => x.SomeSubModels) 

因此,這裏的一對夫婦的基本規則設計一個ASP.NET MVC應用程序(按順序)時應遵循:

  1. 你忘記ViewBag/ViewData的。就好像它們不存在一樣。你只是將它們抹去而已。如果你忘了他們,你會爲自己做一個真正的服務。
  2. 您定義了一個視圖模型,該模型是一個包含視圖將需要的所有屬性的類。
  3. 您有控制器操作查詢您的存儲庫和域模型,並將結果映射到將傳遞給視圖的此視圖模型。
  4. 在相應的視圖中,您只需使用控制器操作提供的視圖模型的屬性來顯示一些信息。

規則1是真正的基礎和最重要的。如果你不尊重這個規則,你真的沒有正確地做ASP.NET MVC。

+0

我有一個列出項目的視圖,也允許創建項目。當用戶希望創建一個項目時,我不想回發整個列表,在這種情況下,我選擇不使用強類型視圖模型,因爲我不想僅僅重新發布整個列表添加一個項目。 – 2012-02-27 22:49:08

+0

@TravisJ,絕對沒有你不應該在ASP.NET MVC中使用強類型視圖模型的情況,你應該選擇使用ViewBag/ViewCrap。查看模型是要走的路。他們會解決你所有的問題。只是不要害怕給你的項目添加新的類。 – 2012-02-27 22:50:05

+0

如果用'[httppost]'裝飾的控制器接受視圖模型,並且視圖模型被傳遞到視圖中並顯示完整列表,那麼不會發布該列表? – 2012-02-27 22:50:37