gpt4 book ai didi

asp.net - asp.net core mvc中Model和ViewModel有什么区别?

转载 作者:行者123 更新时间:2023-12-02 19:07:47 26 4
gpt4 key购买 nike

我有一个帐户模型的帐户类。

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”的模型类。

但我在登录 View 中仅使用两个属性:字符串 ID 和字符串 PassWord。因此,当我检查模型的验证时,我无法在登录 Controller 中使用 ModelState.Isvalid() 因为我使用只有两个属性...

所以我当时搜索了这个,现在我发现了“ViewModel”,它是 View 的模型类。

然后我创建了一个新类“AccountViewModel”,然后将其映射到 View 而不是“Account”模型。

我的方法对吗?我理解 ViewModel 是一个专门用于 View 的模型类。模型类(class)适合所有人。 (比如全局含义...?用于数据库、 View 等)

Model 和 ViewModel 类有什么不同?我可以找到一些好方法来解决这个问题吗?

最佳答案

顾名思义, View 模型是特定于 View 的。它将是一个简单的 POCO,仅包含 View 所需的属性。

您的另一个模型类是实体模型。因此,如果您使用 EF 代码优先方法,则需要 EF 从中生成数据库表的实体类定义。所以基本上这些实体类看起来与您的数据库架构结构非常相似。

通过创建 View 模型,您可以消除实体类与 UI 层的强耦合。现在你的 UI 层独立于你的实体类,如果你决定将数据访问代码从 EF 更改为其他内容,你根本不需要接触 View 。你只需要更新映射部分(从 View )数据访问/服务层实体的模型)

View 模型有时看起来与实体模型非常相似,特别是当您的实体模型是一个简单的表/类时。

在您的情况下,由于您的 View 正在传递用户 ID 和密码,因此您需要一个仅具有这两个属性的简单 View 模型。当用户提交表单时,您可以读取这些值并根据需要使用它来构建域实体类对象。

public class LoginViewModel
{
public string UserId { set;get;}
public string Password { set;get; }
}

您可以在 View 模型中使用数据注释。 MVC 模型验证框架使用这些数据注释来进行验证。例如,由于用户应该输入用户 ID 和密码,因此您可以使用适当的注释来装饰它们。

public class LoginViewModel
{
[Required]
public string UserId { set;get;}

[Required]
public string Password { set;get; }
}

定义实体类时,[Key] 属性更有用。所以我认为 View 模型不需要它。请记住, View 模型更像是 UI 问题。它根本不知道你的底层数据存储机制。

View 模型属性中最常用的一些属性是

  1. Required
  2. MinLength
  3. Range
  4. Url
  5. Phone
  6. StringLength
  7. DataType

关于asp.net - asp.net core mvc中Model和ViewModel有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46158901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com