【发布时间】:2015-02-04 20:38:41
【问题描述】:
我正在根据 ASP.NET 音乐商店项目中使用的模式构建我的网站,但在编辑用户记录时遇到了一些问题。
我的视图使用PasswordFor 作为密码字段,并且我需要我的网站在没有任何可能的用户干预的情况下更新某些字段(用于审核)。
我的问题是,因为我没有为密码或审计字段提供值,所以他们提交的是空值。
这是我的帖子:
[HttpPost]
public ActionResult Edit(User user)
{
if (ModelState.IsValid)
{
try
{
// supply the Company and Role information by the PK values submitted on the view
user.Company = db.Companies.Single(x => x.CompanyId == user.CompanyId);
user.Role = db.Roles.Single(x => x.RoleId == user.RoleId);
// add the auditing information
user.ModifiedBy = String.Format("{0} {1}", Convert.ToString(Session["firstname"]), Convert.ToString(Session["lastname"]));
user.ModifiedOn = DateTime.Now;
// save the record
db.Entry(user).State = EntityState.Modified;
db.SaveChanges();
return Json(new
{
Message = "Success",
IsOK = bool.TrueString
});
}
catch (Exception ex)
{
if (Request.IsAjaxRequest())
{
ThrowError(ex, "EDIT");
}
else
{
return RedirectToAction("Index");
}
}
}
return View(user);
}
所以当我提交时,因为我不想更改密码,所以我将其留空,这意味着模型得到了一个空值。
如何确保我没有更改的字段不会更新?
【问题讨论】:
-
在POST方法中,从数据库中获取原件,然后将你需要的属性从posted模型映射到原件,并保存原件
-
我希望有一种方法可以减少 PT...然后我就去吧
-
您还可以根据this answer将属性标记为未修改
-
这里评分最高的答案是最简单的解决方案:- stackoverflow.com/questions/8332594/…
-
我第二次使用视图模型。您的数据库支持的实体根本无法用作实际模型。我希望微软真的会在他们的任何 MVC 教程中说明这一点。
标签: asp.net-mvc