Asp.net mvc 在mvc中编辑记录时如何保留现有值
我正在基于ASP.NET音乐商店项目中使用的模式构建我的网站,但在编辑用户记录时遇到了一些问题 我的视图使用PasswordFor作为密码字段,有些字段需要我的站点更新,而无需任何可能的用户干预进行审核 我的问题是,因为我没有为密码或审核字段提供值,所以它们提交时使用空值 这是我的帖子:Asp.net mvc 在mvc中编辑记录时如何保留现有值,asp.net-mvc,Asp.net Mvc,我正在基于ASP.NET音乐商店项目中使用的模式构建我的网站,但在编辑用户记录时遇到了一些问题 我的视图使用PasswordFor作为密码字段,有些字段需要我的站点更新,而无需任何可能的用户干预进行审核 我的问题是,因为我没有为密码或审核字段提供值,所以它们提交时使用空值 这是我的帖子: [HttpPost] public ActionResult Edit(User user) { if (ModelState.IsValid) { try {
[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);
}
因此,当我提交时,因为我不想更改密码,所以我将其留空,这意味着模型将获得一个空值
如何确保我没有更改的字段不会被更新?首先,您应该在表单中提供一些隐藏字段,用于存储实体的ID 然后,在控制器后期操作中,您应该以某种方式将原始实体与视图中所做的更改合并。因此,您应该执行以下步骤: 从数据库中读取记录。 仅更新视图模型中已更新的字段。 保存更改。 对于第二步,您可以使用映射工具,例如- 大致应该是这样的:
var updated = SomeClass.GetByKey(key);
Mapper.CreateMap<ViewModel, Model>()
.ForMember(dest => dest.someField, opt => opt.Ignore())
.ForMember(dest => dest.someField2, opt => opt.Ignore());
Mapper.Map(model, updated);
//Here save changes
我所说的视图模型是指与视图绑定的视图模型或模型实例。在POST方法中,从数据库中获取原始数据,然后将所需属性从发布的模型映射到原始数据,并保存原始数据。阿里希望有一种不太重要的方法。。。接下来,我去看看它,然后你也可以根据最高评分的答案将属性标记为未修改,这里是最简单的解决方案:-我使用视图模型。您的数据库支持实体根本无法用作实际模型。我希望微软能在他们的MVC教程中详细说明这一点。