在 ASP.NET MVC 应用程序中,每个控制器操作是否有不同的 ViewModel,或者所有操作都有一个共享的 ViewModel。
例如,如果我有一个带有 List 和 Create 操作的用户控制器,我应该有一个 UserViewModel,还是应该有一个 CreateUserViewModel 和 ListUsersViewModel?
在 ASP.NET MVC 应用程序中,每个控制器操作是否有不同的 ViewModel,或者所有操作都有一个共享的 ViewModel。
例如,如果我有一个带有 List 和 Create 操作的用户控制器,我应该有一个 UserViewModel,还是应该有一个 CreateUserViewModel 和 ListUsersViewModel?
由于列出所有用户和创建/编辑用户是不同的事情,您可能需要 2 个不同的视图。但是,您可以在创建用户和编辑用户之间创建和共享编辑模型/视图。
如果它们将具有几乎相同的属性,那么可以共享。如果没有,则创建 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