2012-07-06 86 views
1

我正在使用C#MVC和Razor。MVC ViewModel類

說如果我有一個顯示列表,下拉列表和2個文本框的視圖。 所有這些信息應該保存在一個類中,然後傳遞給我的觀點?

+4

這真的取決於數據是什麼。如果所有組件中的數據是密切相關的 - 例如,對於同一領域的不同子領域 - 比是肯定的,最好將它們全部放在一個班級中。 – 2012-07-06 21:47:11

回答

1

我無法從你的控制器將數據傳遞到強調不夠用的ViewModels的重要性視圖。正如你的問題所述,你已經這樣做了,這是一個很好的開始!

所以..這就是我該怎麼做的。

public class IndexViewModel // or DetailsViewModel or whatever the Action Method is 
{ 
    public IEnumerable<Foo> Foos { get; set; } 
    public SelectList DropDownBox { get; set; } 
    public string Name { get; set; } // Textbox 1 
    public string Description { get; set; } // Textbox 2 
} 

好的。所以讓我們看看我做了什麼。

我已經通過了View要求的所有信息。沒有更多,沒有更多。只是-exact-信息。

Foosfoo的列表,然後您可以循環顯示。 (專業小貼士:使用DisplayTemplates渲染自定義類型/自定義類型的集合)。

我也建議在傳遞SelectList這是下拉內容等。有些人不喜歡這(這是很好)。相反,他們傳遞他們的項目集合在下拉列表中呈現,但我個人覺得這太漏洞了。我們有ViewModels的關鍵原因是我們可以測試這些東西。

最後,每個文本框都有一個屬性。

所以總之,我把所有的信息放在一個ViewModel。該視圖模型可以包含其他類(通過屬性公開)。但是是的 - 你想要一個VIEWMODEL PER VIEW

HTH :)

0

那麼從我已經完成的項目中,我會建議將所有信息保存在一個類中,但這一切都取決於數據,正如Idan Arye所述,您正在使用。從你所問的我會建議看一下MSDN,這是C#的好資源。希望這有助於

0

這取決於有多大將是你的模型,但是是你可以讓他們在一個班

對於例如如果像Employee一樣簡單,如下所示,然後將其保留在一個類中。但是,如果更大然後這個和它的3倍-4具有更爲複雜的數據字段然後嘗試讓他們在不同的班級

public class EmployeeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var employeeModel = new Employee 
     { 
      FirstName = "Hat", 
      LastName = "Soft", 
      Departments = new BindingList<SelectListItem> 
      { 
       new SelectListItem {Text = "Accounts", Value = "1"}, 
       new SelectListItem {Text = "Human Resource", Value = "2"}, 
       new SelectListItem {Text = "Operations", Value = "3"} 
      } 
     }; 

     return View(employeeModel); 
    } 
} 
0

也許你實際上是在問我應該使用視圖模型?

到類似... Should I use a view model for just two objects?

恕我直言視圖模型與MVC和剃刀工作時往往是一個不錯的選擇。

最終取決於你,決定取決於你的模型和其他因素。例如,如果視圖所需的位最終來源於模型中的不同實體,那麼可能會認爲答案是肯定的,並且應考慮使用視圖模型,因爲可以根據您的視圖對單個視圖模型進行定製。

基本查看模型可以幫助保持您的意見清潔。通常考慮的主要含義是映射域實體查看模型和其他方式(例如在GET或POST期間)所需的必然映射邏輯。 AutoMapper是一個可以用來減少映射代碼的庫的示例。根據我的經驗,只要您的映射邏輯不是非常複雜,就可以很好地工作。

0

在我看來,取決於頁面是什麼,如果你要顯示的域對象的屬性,在這種情況下,你應該考慮有一個特殊的對象的視圖(如視圖模型)你的類將域的對象類(例如用戶)和某些時候你的視圖模型(例如UserViewModel)。

當然,您也可以使用Value Objects/DTO來攜帶複合對象,因此,您必須創建與域無關但仍然需要在您的系統中傳輸數據的通信類DAL給你的意見。

最後,您將始終需要一個視圖模型類,它將與域對象或自定義的DTO /值對象相對應,以在視圖中顯示數據。

希望這會有所幫助。