asp.net core mvc中Model和ViewModel有什么区别? [复制]

2023-12-29

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

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 问题。它根本不知道你的底层数据存储机制。

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

  1. Required https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.requiredattribute(v=vs.110).aspx
  2. 最小长度 https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.minlengthattribute(v=vs.110).aspx
  3. Range https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.rangeattribute(v=vs.110).aspx
  4. Url https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.urlattribute(v=vs.110).aspx
  5. Phone https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.phoneattribute(v=vs.110).aspx
  6. 字符串长度 https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.stringlengthattribute(v=vs.110).aspx
  7. DataType https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.datatypeattribute(v=vs.110).aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

asp.net core mvc中Model和ViewModel有什么区别? [复制] 的相关文章

  • sitecore 站点内嵌套虚拟目录或应用程序是否可能

    我想将 ASP NET Web 应用程序嵌套在 sitecore 站点中 如下所示
  • 使用 401 发送消息:Asp.net Web-api

    我在 ASP NET Web API 中 在登录方法中 我根据数据库检查用户 密码 如果它们不匹配 我将返回 401 状态代码以及invalid user or password method like var content new St
  • 基于 Web.Config 使用的 GAC 程序集版本

    Good Day 我有一个在 GAC 中使用自定义程序集的项目 为了能够使用它 我在中添加了对我的项目的引用 C WINDOWS Microsoft NET assembly GAC MSIL JOHN CommonLib v4 0 1 0
  • 在我的网站上显示 Google Analytics(分析)仪表板

    我设置了一个 ASP NET 网站 并使用 Google Analytics 进行页面跟踪 我唯一不喜欢的是我必须离开我的网站 到 Google Analytics 网站 才能看到该报告 有什么方法可以使用他们拥有的所有 AJAX 在我自己
  • 即使通过 ssl,在 ViewState 中存储信用卡和定价信息是否安全?

    我有一个带有私有属性的页面 该页面在视图状态中存储信用卡对象和购物车对象 以便我可以在回发期间维护对它们的引用 顺便说一句 涉及的页面将使用 SSL 这安全吗 我不会在视图状态中存储敏感信息 ever 通过这样做 您将安全性委托给浏览器的实
  • 导出到 CSV 时 Gridview 出现空行

    这个问题是由进一步讨论引发的这个问题 https stackoverflow com questions 6674555 export gridview data into csv file 6674589 noredirect 1 com
  • 在多个网页(.cshtml 文件)中使用 Razor @functions

    我有以下功能 我希望可用于我的 asp net 网页 2 应用程序中的多个 cshtml 视图 如何使该功能可用于应用程序中的任何视图 而不是仅一个视图 functions public bool DisplayButton String
  • 设置 runat=server 时输入名称和 id 发生变化

    在我的表单中 我需要插入 文本 类型的不同输入 输入必须是带有名称和 ID 的 html 控件 因为我将此表单发送到外部网址 对于验证 我在所有输入中执行 runat server 然后我可以使用 requiredfieldvalidato
  • 如何在aspx页面中的repeater ItemDataBound函数中传递Control.ClientID?

    我想调用 JavaScript 函数来折叠 展开 我在 asp repeater 中使用此代码ItemTemplate在跨度上 onclick javascript funCollExp this 我该如何通过Control ClientI
  • 如何在 MVC3 Razor 视图中呈现数据表

    我在 xls 电子表格 1 之间有一个可靠且经过测试的导入方法 该方法返回DataTable 我已将其定位在我的服务层中 而不是数据中 因为只有工作簿作为上传文件保存 但现在我想知道在哪里以及如何生成此内容的 HTML 表示形式DataTa
  • 您会认为这是单例/单例模式吗?

    想象一下 在 Global asax cs 文件中 我有一个实例类作为私有字段 我们这样说 private MyClass myClass new MyClass 我在 Global 上有一个名为 GetMyClass 的静态方法 它获取当
  • 服务层和存储库

    我使用 MVC 框架已经有一段时间了 我真的很喜欢如何分离关注点 我养成了让控制器做大量工作的坏习惯 所以我真的在寻求一些建议 当我第一次开始使用 MVC 时 我经常在数据库工作完成后让控制器对模型进行操作 我知道这很糟糕 所以将这项工作转
  • ASP.NET预编译的优点是什么?

    使用 Aspnet compiler exe 代替通过 Visual Studio 进行的传统发布有多有用 那么资源 resx 文件又如何呢 与简单的 xcopy 相比 预编译有两个主要优点 文件系统不会包含所有代码 aspx文件和后面的所
  • 序列包含多个元素

    我在通过 Linq 获取 RhsTruck 类型的列表并显示它们时遇到一些问题 RhsTruck 只有属性 品牌 型号 序列号 等 RhsCustomer 具有 CustomerName CustomerAddress 等属性 我不断收到错
  • 单元测试:创建“模拟”请求来模拟 MVC 页面请求

    如何为我的 asp net mvc 应用程序创建模拟请求以进行单元测试 我有什么选择 我在我的操作中使用 FormsCollection 因此我也可以模拟表单输入数据 您只需创建 FormCollection 的新实例并在其中添加数据即可
  • 使用 Kentor.AuthServices.StubIdp 作为生产 IDP

    我正在尝试在我的应用程序中实现 IDP SAML2 服务器 鉴于我的应用程序拥有所需的所有数据 我不希望我的任何合作伙伴要求我们的客户在他们这边注册 我对 SAML2 协议不是很熟悉 我找到了这个项目Kentor AuthServices
  • Demandware MVC 概念

    我是 Demandware 的新手 我正在从 Magento 切换到 Demandware Demandware 不是开源的 我没有得到适当的教程 无法理解它的概念 我来自 Magento 所以我知道 Magento MVC 结构 但在 D
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • ASP.NET Click() 事件在第二次回发时不会触发

    我有一个 ASP NET Web 表单 我第一次提交表单时 会引发 提交按钮单击 事件 表单返回到浏览器时可能会出现验证错误 或者可以选择使用新值再次提交表单 当再次提交表单时 提交按钮单击 事件永远不会触发 Page Load 触发 但按
  • 导致回发到与弹出窗口不同的页面

    我有一个主页和一个详细信息页面 详细信息页面是从主页调用的 JavaScript 弹出窗口 当单击详细信息页面上的 保存 按钮时 我希望主页 刷新 是否有一种方法可以调用主页的回发 同时还可以从详细信息页面维护保存回发 Edit 使用win

随机推荐

  • 片段替换后,使用 RxJava2 + RxBinding 的 RecyclerView 项目单击不起作用

    我在 Fragment 中有一个 RecyclerView 项目点击是使用 RxJava2 处理的 如中所述这个答案 https stackoverflow com a 39962415 2341815 它在非片段中运行良好 private
  • 生成 3 到 6 之间的随机 int 值

    Microsoft SQL Server 是否可以生成从 Min 到 Max 的随机 int 值 3 9 示例 15 99 等 我知道 我可以从0到Max生成 但是如何增加Min边框呢 该查询生成从 1 到 6 的随机值 需要将其从 3 更
  • 如何对带有连接的 SQL 查询结果应用分页?

    我有一个连接 3 个表的 SQL 查询 其中一个只是连接另外两个表的多对多 我使用 Spring JDBC ResultSetExtractor 将 ResultSet 转换为我的对象 大致如下所示 class Customer priva
  • 如何附加到字符串中的所有网址?

    我应该如何附加到即将作为电子邮件发送的 html 字符串中所有 url 的末尾 我想像这样添加谷歌分析活动跟踪 utm source email utm medium email utm campaign product notify 99
  • elasticsearch中的源过滤、存储字段和文档值之间有什么区别?

    我已经阅读了文档源过滤 https www elastic co guide en elasticsearch reference 6 4 search request source filtering html 存储字段 https ww
  • 多维数组快速排序

    我需要根据第一个子数组中的值尽快对多维数组进行排序 该行被应用了数百万次 以下是我原来的路线 以及我改进其性能的尝试 但没有成功 据我所知 我的numpy方法仅对第一个子数组进行正确排序 而不对其余子数组进行正确排序 我做错了什么以及如何提
  • 在 params 中传递函数时,在导航状态中发现不可序列化的值

    我有两个屏幕 Screen A import React useState from react import Text View Button from react native const ViewA navigation gt con
  • 使用属性公开类似数组的数据结构

    通常将内部数据结构作为属性公开给您的业务类 但是 当我们必须公开类似数组的结构 如 List 规则 时 我们可能会遇到错误使用的问题 如选项 1 中所示 建议将此类数据结构的克隆公开为属性 以便内部结构不会受到干扰 有没有人对此有一个很好的
  • PHP Sql Server PDOException:找不到驱动程序

    我的服务器是Windows 2008服务器 PHP 版本 7 2 7 已安装并正在运行 Sql Server 11 64 位 已安装并正在运行 有几个 asp net 应用程序正在运行并已在使用该数据库 我从 Microsoft 网站下载了
  • 扩展坞显示或隐藏时的事件

    当 Dock 显示或隐藏时如何获取事件 如果扩展坞可见或未使用 Carbon 您会收到通知 我不知道有什么方法可以在可可中做到这一点 我没有测试过这个 它来自代码here http www cocoabuilder com archive
  • 无法在 Odoo 9 中显示选定的图像

    我在加载图像时遇到问题product template表单视图 当我上传新图像时 它正在上传并且displaying correctly in product kanban view 但在product form view它给了我错误无法显
  • 如何获取 WindowTimer 实现对象的“活动计时器列表”

    W3C 规范规定 每个实现 WindowTimers 接口的对象都有一个活动计时器列表 但我从未在任何地方见过如何访问该列表并检查它 这是否意味着它是特定于实现的并且不意味着可访问 或者您可以访问活动计时器列表 检查它以获得最高的 ID 因
  • “new System.Timers.ElapsedEventHandler(DoStuff)”调用不起作用

    我正在尝试在 C 中创建监视文件夹应用程序 该应用程序将在新文件到达时执行操作 由于监视的文件夹位于 GPFS 共享上 我无法使用 FileSystemWatcher 它在 NTFS 中对我来说工作得很好 所以我基于其他同事的应用程序sol
  • 在 Parse Cloud Code 更新 Stripe 模块

    事实证明 Parse Could Code 中的 Stripe 模块已过时且不会更新 Source https developers facebook com bugs 523104684492016 https developers fa
  • Sql Server XML类型列重复条目检测

    在 Sql Server 中 我使用 XML 类型列来存储消息 我不想存储重复的消息 我只会为每个用户发送几条消息 我当前正在查询表中的这些消息 将 XML 转换为 C 代码中的字符串 然后我将这些字符串与我要插入的字符串进行比较 不幸的是
  • Android数据绑定设置alignParentTop

    我有以下布局 仅留下相关部分
  • 是否可以替换系统打开文件对话框?

    我想用我编写的对话框替换标准系统打开文件对话框 这意味着无论您在哪个程序中打开文件 都会显示我的对话框而不是标准对话框 这可能吗 似乎没有提供这样的 API 来完成此操作 是否可以使用一些挂钩技术 但这必须可靠并且不会被防病毒工具视为间谍软
  • 实现另一个协议的协议变量

    我正在尝试做类似的事情 但是 ParentC不符合Parent因为它是children会员不是Child but ChildC 这很奇怪 因为ChildC实施Child 这是 Swift 的限制吗 或者有办法做到这一点吗 我不要求替代解决方
  • Linux正弦波音频发生器[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在linux下使用我的笔记本电脑作为正弦发生器 但我还没有找到可以发出声音的程序 有人可以告诉我正确
  • asp.net core mvc中Model和ViewModel有什么区别? [复制]

    这个问题在这里已经有答案了 我有一个帐户模型的帐户类 public class Account Key public Int64 UID get set Required public string ID get set Required