我正在学习使用MVC 3框架,但我在理解某些概念时遇到了一些问题。我问这个问题是因为我试图理解“Internet应用程序模板”生成的代码 在RegisterModel的AccountModels.cs文件中,我们找到:
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
很明显,您的数据库中没有Password和ConfirmPassword字段,您只需要一个密码字段。那么,为什么这个模型不镜像数据库呢?我错过了什么?
答案 0 :(得分:4)
这是一个视图模型,而不是模型。视图模型不应镜像任何数据库。视图模型甚至不知道数据库是什么。视图模型是您设计的,以满足特定视图的要求。它是一个控制器动作传递给视图的类。
在谈论模型时,我们通常会讨论域模型或域实体。这些符合您的业务要求。
所以这是控制器动作的常用流程:
反过来说:
因此,单个域模型可以具有多个视图模型表示。单个视图模型可以映射到多个域模型。
答案 1 :(得分:1)
模型不必与数据库匹配。您通常会有数据库表的模型,但也包含与特定页面相关的信息的模型(在MVC中称为View),例如登录页面。
模型可以包含这两者;表示数据库表并查看特定信息。这些有时被称为ViewModels。
您可以发送到视图的任何信息都可以在模型中表示。