【发布时间】:2017-01-03 20:29:09
【问题描述】:
我在ASP.NET MVC 项目中使用相同的ViewModel,但是对于一千条记录,最好不要从数据库中检索未使用的记录。例如,假设UserViewModel 用于Read、Create 和Update 情况,如下所示:
public class UserViewModel
{
public int Id { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public string ConfirmPassword { get; set; }
public bool EmailConfirmed { get; set; }
public virtual int AccessFailedCount { get; set; }
public virtual bool LockoutEnabled { get; set; }
public virtual DateTime? LockoutEndDateUtc { get; set; }
public virtual string PasswordHash { get; set; }
public virtual string PhoneNumber { get; set; }
public virtual bool PhoneNumberConfirmed { get; set; }
public virtual string SecurityStamp { get; set; }
public virtual bool TwoFactorEnabled { get; set; }
}
阅读: 在显示记录的详细信息时,我需要检索除密码之外的所有属性(我知道我也可以在没有ViewModel 的情况下检索数据,但有时我需要在一个 ViewModel 中组合多个视图,这也是类似的情况。
创建:创建新记录时,不需要使用Id、EmailConfirmed、AccessFailedCount等列。
更新:更新记录时,我也不需要使用某些属性。
在这个场景下,使用ViewModel的最佳方法是什么?要创建单独的ViewModel,即ReadUserViewModel、CreateUserViewModel 和UpdateUserViewModel,还是为同一组数据使用相同的ViewModel?任何帮助,将不胜感激。
【问题讨论】:
-
view model 的目的是表示视图中的数据,以便单个视图模型有意义。而且您始终可以拥有一个基本视图模型,其中包含所有人共有的属性以避免重复。
-
@StephenMuecke 我以前读过that useful post you suggested。在这种情况下,您的意思是不需要使用单独的视图模型,最好为每个操作使用相同的视图模型,即读取、创建、更新?如果是这样,我们是否应该在检索数据时也使用 ViewModel 而不是直接从 DbContext 中检索数据?在 Controller 中,我从数据库中检索它并填充到 ViewModel,然后再返回 View。这是一个好方法吗?
-
就我个人而言,我总是使用特定于视图的视图模型(在您的情况下,有一个
class UserBaseVM包含所有视图共有的属性(例如Email),然后有一个视图模型对于从UserBaseVM继承的每个视图,例如class UserCreateVM : UserBaseVM将包含特定于创建新用户的属性(例如ConfirmPassword) -
是的,似乎更好更干净。关于我问题的第二部分的任何想法(......我们是否应该在检索数据时也使用 ViewModel......)?
-
抱歉,不确定您的意思。通常你会使用
var model = db.Users.Select(x => new UserVM() { Email = x.Email, ..... });之类的东西来调用数据库并将数据投影到视图模型中,然后再将其返回到视图中(或使用automapper等工具
标签: asp.net asp.net-mvc asp.net-mvc-4 viewmodel asp.net-mvc-viewmodel