asp.net core mvc 中的 Model 和 ViewModel 有什么区别?
What is difference between Model and ViewModel in asp.net core mvc?
我有一个用于帐户模型的帐户 class。
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; }
}
我的项目不是代码优先项目,这是数据库 'Account' 的模型 class。
但是我在登录视图中只使用了两个属性,string ID 和 string PassWord。
所以当我检查模型验证时我不能在登录控制器中使用 ModelState.Isvalid() 因为我使用
只有两个属性...
所以我当时搜索了一下,现在我找到了 'ViewModel',这是供查看的模型 class。
然后我创建了一个新的 class 'AccountViewModel' 然后我用视图而不是 'Account' 模型映射了它。
我的方法对吗?
我了解 ViewModel 是一个仅用于 View 的模型 class。
模型 class 适用于所有人。 (比如全局意义...?对于数据库、视图等)
Model 和 ViewModel 有什么不同 class?
我可以找到解决这个问题的好方法吗?
顾名思义,视图模型非常具体 view.It 将是一个简单的 POCO,只有视图所需的那些属性。
你的另一个模型class是你的实体模型。因此,如果您使用 EF 代码优先方法,则需要实体 class 定义,EF 将从中生成数据库表。所以基本上这些实体 classes 看起来与您的数据库模式结构非常相似。
通过创建视图模型,您将移除实体class与UI层的强耦合。现在您的 UI 层独立于您的实体 classes,如果您决定将数据访问代码从 EF 更改为其他代码,则无需触及 all.You 处的视图只需要更新映射部分(从视图模型到数据access/service层实体)
视图模型有时看起来与您的实体模型非常相似,尤其是如果您的实体模型是简单的 table/class。
在您的情况下,由于您的视图正在传递用户 ID 和密码,因此您需要一个仅具有这 2 个属性的简单视图模型。当用户提交表单时,您可以读取值并根据需要使用它来构建域实体 class 对象。
public class LoginViewModel
{
public string UserId { set;get;}
public string Password { set;get; }
}
您可以对视图模型使用数据注释。 MVC 模型验证框架使用这些数据注释来进行验证。例如,由于用户应该输入 UserId 和 Password,您可以用适当的注释来装饰它们。
public class LoginViewModel
{
[Required]
public string UserId { set;get;}
[Required]
public string Password { set;get; }
}
当您定义实体 class 时,[Key]
属性更有用。所以我认为视图模型不需要它。请记住,视图模型更像是一个 UI 问题。它根本不知道你的底层数据存储机制。
视图模型属性中一些最常用的属性是
我有一个用于帐户模型的帐户 class。
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; }
}
我的项目不是代码优先项目,这是数据库 'Account' 的模型 class。
但是我在登录视图中只使用了两个属性,string ID 和 string PassWord。 所以当我检查模型验证时我不能在登录控制器中使用 ModelState.Isvalid() 因为我使用 只有两个属性...
所以我当时搜索了一下,现在我找到了 'ViewModel',这是供查看的模型 class。
然后我创建了一个新的 class 'AccountViewModel' 然后我用视图而不是 'Account' 模型映射了它。
我的方法对吗? 我了解 ViewModel 是一个仅用于 View 的模型 class。 模型 class 适用于所有人。 (比如全局意义...?对于数据库、视图等)
Model 和 ViewModel 有什么不同 class? 我可以找到解决这个问题的好方法吗?
顾名思义,视图模型非常具体 view.It 将是一个简单的 POCO,只有视图所需的那些属性。
你的另一个模型class是你的实体模型。因此,如果您使用 EF 代码优先方法,则需要实体 class 定义,EF 将从中生成数据库表。所以基本上这些实体 classes 看起来与您的数据库模式结构非常相似。
通过创建视图模型,您将移除实体class与UI层的强耦合。现在您的 UI 层独立于您的实体 classes,如果您决定将数据访问代码从 EF 更改为其他代码,则无需触及 all.You 处的视图只需要更新映射部分(从视图模型到数据access/service层实体)
视图模型有时看起来与您的实体模型非常相似,尤其是如果您的实体模型是简单的 table/class。
在您的情况下,由于您的视图正在传递用户 ID 和密码,因此您需要一个仅具有这 2 个属性的简单视图模型。当用户提交表单时,您可以读取值并根据需要使用它来构建域实体 class 对象。
public class LoginViewModel
{
public string UserId { set;get;}
public string Password { set;get; }
}
您可以对视图模型使用数据注释。 MVC 模型验证框架使用这些数据注释来进行验证。例如,由于用户应该输入 UserId 和 Password,您可以用适当的注释来装饰它们。
public class LoginViewModel
{
[Required]
public string UserId { set;get;}
[Required]
public string Password { set;get; }
}
当您定义实体 class 时,[Key]
属性更有用。所以我认为视图模型不需要它。请记住,视图模型更像是一个 UI 问题。它根本不知道你的底层数据存储机制。
视图模型属性中一些最常用的属性是