我有一个帐户模型的帐户类。
public class Account
{
[Key]
public Int64 UID { get; set; }
[Required]
public string ID { get; set; }
[Required]
public string PassWord { get; set; }
[Required]
public string UserName { get; set; }
}
我的项目不是代码优先项目,这是数据库“帐户”的模型类。
但我在登录视图中只使用两个属性,字符串 ID 和字符串 PassWord。
因此,当我检查模型的验证时,我无法在登录控制器中使用 ModelState.Isvalid() 因为我使用
只有两个属性...
所以我当时搜索了这个,现在我发现了“ViewModel”,它是视图的模型类。
然后我创建了一个新类“AccountViewModel”,然后用视图而不是“Account”模型映射它。
我的方法对吗?
我理解 ViewModel 是一个专门用于 View 的模型类。
模型课程适合所有人。 (比如全局含义...?用于数据库、视图等)
Model 和 ViewModel 类有什么不同?
我可以找到一些好方法来解决这个问题吗?
顾名思义,视图模型是针对视图的。它将是一个简单的 POCO,仅包含视图所需的属性。
您的另一个模型类是实体模型。因此,如果您使用 EF 代码优先方法,则需要 EF 从中生成数据库表的实体类定义。所以基本上这些实体类看起来与您的数据库模式结构非常相似。
通过创建视图模型,您可以消除实体类与 UI 层的强耦合。现在你的 UI 层独立于你的实体类,如果你决定将数据访问代码从 EF 更改为其他内容,你根本不需要接触视图。你只需要更新映射部分(从视图)数据访问/服务层实体的模型)
视图模型有时看起来与实体模型非常相似,特别是当您的实体模型是一个简单的表/类时。
在您的情况下,由于您的视图传递用户 ID 和密码,因此您需要一个仅具有这两个属性的简单视图模型。当用户提交表单时,您可以读取这些值并根据需要使用它来构建域实体类对象。
public class LoginViewModel
{
public string UserId { set;get;}
public string Password { set;get; }
}
您可以将数据注释与视图模型一起使用。 MVC 模型验证框架使用这些数据注释来进行验证。例如,由于用户应该输入用户 ID 和密码,因此您可以使用适当的注释来装饰它们。
public class LoginViewModel
{
[Required]
public string UserId { set;get;}
[Required]
public string Password { set;get; }
}
The [Key]
当您定义实体类时,属性更有用。所以我认为视图模型不需要它。请记住,视图模型更像是 UI 问题。它根本不知道你的底层数据存储机制。
视图模型属性中最常用的一些属性是
- Required https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.requiredattribute(v=vs.110).aspx
- 最小长度 https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.minlengthattribute(v=vs.110).aspx
- Range https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.rangeattribute(v=vs.110).aspx
- Url https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.urlattribute(v=vs.110).aspx
- Phone https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.phoneattribute(v=vs.110).aspx
- 字符串长度 https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.stringlengthattribute(v=vs.110).aspx
- DataType https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.datatypeattribute(v=vs.110).aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)