为了账号安全,请及时绑定邮箱和手机立即绑定

ASP.NET MVC-如何精确使用视图模型

ASP.NET MVC-如何精确使用视图模型

慕森卡 2019-12-27 14:46:07
假设我有一个页面可以编辑用户的详细信息,所以我有一个这样的ViewModel: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; }}这是正确的方法吗?他们都是视图模型吗?如果是这样,我是否应该使用命名约定,以便区分模型之类的VM和仅包含该页面数据的VM?我有错吗?
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

我个人更喜欢将页面呈现所需的所有信息放入ViewModel中,因为这是ViewModel的目的-为View提供所有数据。因此,我UserViewModel将包含的属性ManagersCategories并且AllUsers控制器将把ViewModel传递给视图之前填充这些集合。

从本质上讲,这就是您要做的-它只是从等式中删除了多余的ViewModel。

我还看到其他程序员使用ViewData将下拉列表发送到视图,但是我不喜欢这样做,因为ViewData不是强类型的,而ViewModel是强类型的。


查看完整回答
反对 回复 2019-12-27
  • 3 回答
  • 0 关注
  • 539 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信