gpt4 book ai didi

c# - 在 MVC 上执行编辑时如何保留某些字段的原始值?

转载 作者:可可西里 更新时间:2023-11-01 08:00:26 25 4
gpt4 key购买 nike

如您所知,当我们要修改数据时,我们将进入编辑页面:

public ActionResult EditAdmin(int UserId)
{
User user = persons.Users.Find(id);
return View(user);
}

然后我们在编辑页面提交,它会修改:

public ActionResult EditAdmin(User user)
{
persons.Entry(user).State = EntityState.Modified;
persons.SaveChanges();
}

但问题是,我有很多字段不需要修改:

public class User{
public int UserId {get; set;} // do not need modify
public int Password {get; set;} // do not need modify
public string Name {get; set;}
public bool Sex {get; set;}
public DateTime AddTime {get; set;} // do not need modify
}

显然,我不能使用隐藏 在我的编辑页面上显示某些字段,因为我不希望它显示在 UI 上。但是提交时,我仍然需要它仍然保持原始值。那么有什么好主意吗?谢谢

更新1:

为什么我不能用like

entry.Property(e => e.Password).IsModified = false;

链接:https://stackoverflow.com/a/18004476/1900498

但它会显示:

Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.

最佳答案

从数据库中获取现有版本,然后仅更改“可修改”字段:

public ActionResult EditAdmin(User user)
{
var currentPerson = db.Persons.FirstOrDefault(p => p.id = user.id);
if (currentPerson == null)
return HttpNotFound();

currentPerson.Name = user.Name;
currentPerson.Sex = user.Sex;
// Id and Password are not updated.

db.SaveChanges();
}
  • 您可能还想做一些乐观的并发检查,以确保正在更新的版本实际上是最新的。理想情况下,如果您有时间戳,请使用它,否则,您将面临比较所有字段的问题。

编辑
另请参阅@Kris 的评论和 Ric 关于创建定制 View 模型的观点,因此不会用 ORM/数据层实体污染您的 View 。我还认为您需要通过 ViewModel 携带时间戳或哈希,以防止 last one wins 覆盖问题。

关于c# - 在 MVC 上执行编辑时如何保留某些字段的原始值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26546891/

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