比方说,我有一个页面,允许用户的详细信息的编辑,所以我有一个视图模型是这样的: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