gpt4 book ai didi

asp.net-mvc - 如何使用 ASP.net MVC、 Entity Framework 和 Razor 对模型进行补丁更新

转载 作者:行者123 更新时间:2023-12-02 06:59:33 24 4
gpt4 key购买 nike

我设法使用 asp.net MVC 创建了基本的 CRUD 操作

但是我的字段 StatusCreatedOnCreatedBy 有问题。

我希望在创建操作期间填充这些字段并且在编辑操作期间不更新但我不想对这些字段使用@HiddenFor,因为您可以编辑 DOM 并在 POST 请求之前仍然更新这些信息.

所以基本上我想要的是使用 POST 请求中发送的任何数据修补更新我的模型。所以我不必担心我不想修改的字段正在编辑操作中被更改。

这是我的模型和操作代码。

型号

[Table("Account")]
public class Account
{
#region Properties

[Key]
public int AccountID { get; set; }

[Required]
[StringLength(50)]
[DisplayName("Account Name")]
public string Name { get; set; }

[Required]
[DisplayName("Time Offset")]
[Range(-24,24)]
public decimal TimeOffset { get; set; }

[StringLength(20)]
[DisplayName("Status")]
public string Status { get; set; }

public DateTime CreatedOn { get; set; }

public int CreatedBy { get; set; }

public DateTime? ModifiedOn { get; set; }

public int ModifiedBy { get; set; }

#endregion
}

public class DbAccount : DbContext
{
public DbSet<Account> Accounts { get; set; }
}

创建的 Controller 操作

[HttpPost]
public ActionResult Create(Account account)
{
if (ModelState.IsValid)
{
account.Status = "ENABLED";
account.CreatedOn = DateTime.Now;
account.CreatedBy = 1;
db.Accounts.Add(account);
db.SaveChanges();
return RedirectToAction("Index");
}

return View(account);
}

用于编辑的 Controller 操作

[HttpPost]
public ActionResult Edit(Account account)
{
if (ModelState.IsValid)
{
account.ModifiedOn = DateTime.Now;
account.ModifiedBy = 1;
db.Entry(account).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(account);
}

如何在不影响某些特定属性的情况下修改模型,特别是 CreatedOnCreatedBy,我希望这些属性在编辑操作期间保留其原始值。我不想使用隐藏字段来存储它们。对于我现有的解决方案,我使用了隐藏字段,但它可以在 POST 请求之前在 DOM 中进行修改,因此它是不安全的。

最佳答案

db.Entry(account).State = EntityState.Modified 将模型附加到上下文,所有属性都标记为已修改。尝试以未更改的状态附加它,并将可修改的字段设置为已修改。

[HttpPost]
public ActionResult Edit(Account account)
{
if (ModelState.IsValid)
{
db.Accounts.Attach(account);

db.Entry(account).Property(a => a.Name).IsModified = true;
db.Entry(account).Property(a => a.TimeOffset).IsModified = true;
db.Entry(account).Property(a => a.Status).IsModified = true;

account.ModifiedOn = DateTime.Now;
account.ModifiedBy = 1;

db.SaveChanges();

return RedirectToAction("Index");
}

return View(account);
}

关于asp.net-mvc - 如何使用 ASP.net MVC、 Entity Framework 和 Razor 对模型进行补丁更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23644981/

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