用于创建和更新操作的Asp.net ViewModel

用于创建和更新操作的Asp.net ViewModel,.net,asp.net-mvc,asp.net-mvc-4,viewmodel,.net,Asp.net Mvc,Asp.net Mvc 4,Viewmodel,在ASP.NET MVC应用程序中,每个控制器操作都有不同的ViewModel,还是所有操作都有一个共享的ViewModel 例如,如果我有一个带有列表和创建操作的用户控制器,我应该有一个UserViewModel,还是应该有一个CreateUserViewModel和ListUsersViewModel?因为列出所有用户和创建/编辑用户是不同的事情,所以您可能需要两个不同的视图。但是,您可以在创建用户和编辑用户之间创建并共享编辑模型/视图。如果它们的属性几乎相同,那么可以共享。如果不是,则创建

在ASP.NET MVC应用程序中,每个控制器操作都有不同的ViewModel,还是所有操作都有一个共享的ViewModel


例如,如果我有一个带有列表和创建操作的用户控制器,我应该有一个UserViewModel,还是应该有一个CreateUserViewModel和ListUsersViewModel?

因为列出所有用户和创建/编辑用户是不同的事情,所以您可能需要两个不同的视图。但是,您可以在创建用户和编辑用户之间创建并共享编辑模型/视图。

如果它们的属性几乎相同,那么可以共享。如果不是,则创建2。老实说,我最终通常会分享。

这取决于您在视图中需要什么信息。如果它们使用完全相同的信息,那么共享ViewModel就可以了。如果其中一个具有与另一个相同的所有信息,再加上更多信息,则可以让一个从另一个继承,如下所示:

public class ListViewModel
{
    public string Username { get; set; }
    public string Email { get; set; }
}

public class CreateViewModel : ListViewModel
{
    public bool AcceptedTOA { get; set; }
}
使用类似的方法,您可以在创建视图中访问所有三个值,但在列表视图中只能访问
Username
Email

编辑:添加更多选项

除了继承,您还可以将它们放在彼此的内部,例如

public class CreateViewModel
{
    public ListViewModel ListViewModel { get; set; }
    public bool AcceptedTOA { get; set; }
}
…然后在你看来你会像

@Model.ListViewModel.Username

好的,还有一个疑问,我读过一个策略是创建一个独立的viewmodel->pattern 3(),在列表操作中,这是否也相关?