gpt4 book ai didi

asp.net-mvc-3 - 不在表单上时 MVC3 数据在发布时丢失?

转载 作者:行者123 更新时间:2023-12-02 02:13:09 25 4
gpt4 key购买 nike

我正在处理一个 MVC3 项目,我注意到当从 UI 更新该记录时,数据库中的某些字段被设置为空。发生这种情况是因为这些字段不存在于发布的表单中。我知道这可以通过为这些添加 HiddenFor 条目来解决,但这不是一个好方法,因为任何新字段都需要在那里添加。我希望找到更好的解决方案。

关于项目结构的详细说明:

我们有与 EF 实体完全匹配的 DTO 以简化映射。因此,DTO 具有实体和数据库中存在的每个字段。我们使用 DTO 作为我们的模型。

Controller 将 DTO 传递给服务层。服务层将 DTO 映射到其各自的实体(使用 AutoMapper),并将其传递给持久层。持久层实际上是使用 DbContext 来保存更改。

假设我们有一个带有 Name 成员和 FolderPath 成员的 Client DTO,以及一个在其表单上只有 Name 成员的 View 。表单发布,并且 FolderPath 为空。该空值一直持续到持久层中的更新。沿线的某个地方我必须指定我不希望那个特定的值覆盖数据库中的内容。

根据我收集的关于 SO 的研究大约一个小时,一种方法可能是......

  1. 将 DTO 的范围保持在最小范围内,只针对我们要处理的一组特定字段知道我们将在 View 中的表单上。
  2. 告诉 AutoMapper 忽略任何存在于目的地但不存在于源中的东西 per thisanswer.
  3. 在服务层,当把DTO映射到实体,首先从数据库中检索现有实体。这映射只会覆盖属于 DTO 的成员,并且任何其他值都将持续存在,因为它们是从数据库。

这是一个有效的方法吗?有没有更好或更常见的方法来解决这个问题?

最佳答案

我会选择选项 1,并使用 View /html 形式的特定模型。这是最干净的解决方案,恕我直言。

还有一个主要问题是,其他方法会让您容易受到黑客攻击...也就是说,如果我知道您模型上的其他字段/属性,我可以使用该信息制作一个表单帖子并将其保存。

关于asp.net-mvc-3 - 不在表单上时 MVC3 数据在发布时丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11868691/

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