比方說,我有一個頁面,允許用戶的詳細信息的編輯,所以我有一個視圖模型是這樣的:ASP.NET MVC - 究竟是如何使用視圖模型
public class UserViewModel {
public string Username { get; set; }
public string Password { get; set; }
public int ManagerId { get; set; }
public string Category { get; set; }
}
所以我EditUser行動我能有這樣的回傳被模型綁定,然後我可以映射到域模型:
public ActionResult EditUser(UserViewModel user) {
...
然而,這顯示錶單的頁面也需要細節,如經理和分類的列表提供下拉菜單供那些領域。它也可能在側邊欄中顯示其他用戶的列表,以便您可以在正在編輯的不同用戶之間進行切換。
於是我有另一種看法型號:
public class ViewUserViewModel {
public UserViewModel EditingUser { get; set; }
public IEnumerable<SelectListItem> Managers { get; set; }
public IEnumerable<SelectListItem> Categories { get; set; }
public IEnumerable<SelectListItem> AllUsers { get; set; }
}
這是做了正確的方法是什麼?他們都是視圖模型嗎?如果是這樣,是否有我應該使用的命名約定,以便我可以區分類似模型的虛擬機和僅包含頁面數據的虛擬機?
我有這個錯誤嗎?
關於這個問題的最好解釋。你應該把它放在博客上! +1 – 2014-02-04 16:51:19
你已經提到模型應該負責應用程序的業務邏輯。通過業務,您可能意味着所有的數據準備,查詢,過濾,投影一個模型到另一個模型,或者一個特定的ViewModel。然後這樣準備好的ViewModel被控制器傳遞給View。你如何做到這一點?你如何設計模型來做生意?你是否將所有控制器方法移動到表示視圖模型的類中?目前,我在控制器中有許多功能和「業務」,這些功能和操作完成所有的位和螺栓。謝謝 – Celdor 2015-07-31 10:29:47
坦率地說,你不能在ASP.NET MVC中做到這一點。要真正理解我在說什麼,請在Ruby on Rails中構建一個示例應用程序。 RoR非常嚴格地遵守MVC模式,您將會看到他們的模型到底有多少。另一方面,ASP.NET MVC只是鬆散地遵守MVC。你「模型」將是實體類,視圖模型以及類似存儲庫或服務的某種組合。你應該儘量保持你的控制器精簡,你不能將所有邏輯移動到一個類中。 – 2015-07-31 18:19:59