【问题标题】:Asp.net ViewModel for Create and Update Actions用于创建和更新操作的 Asp.net ViewModel
【发布时间】:2012-09-05 13:41:49
【问题描述】:
在 ASP.NET MVC 应用程序中,每个控制器操作是否有不同的 ViewModel,或者所有操作都有一个共享的 ViewModel。
例如,如果我有一个带有 List 和 Create 操作的 Users 控制器,我应该有一个 UserViewModel,还是应该有一个 CreateUserViewModel 和 ListUsersViewModel?
【问题讨论】:
标签:
.net
asp.net-mvc
asp.net-mvc-4
viewmodel
【解决方案1】:
由于列出所有用户和创建/编辑用户是不同的事情,您可能需要 2 个不同的视图。但是,您可以在创建用户和编辑用户之间创建和共享编辑模型/视图。
【解决方案2】:
如果它们的属性几乎相同,那么可以共享。如果没有,则创建 2。老实说,我通常最终会分享。
【解决方案3】:
这取决于您在视图中需要哪些信息。如果他们使用完全相同的信息,那么共享 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