Asp.net mvc 在mvc中编辑记录时如何保留现有值

Asp.net mvc 在mvc中编辑记录时如何保留现有值,asp.net-mvc,Asp.net Mvc,我正在基于ASP.NET音乐商店项目中使用的模式构建我的网站,但在编辑用户记录时遇到了一些问题 我的视图使用PasswordFor作为密码字段,有些字段需要我的站点更新,而无需任何可能的用户干预进行审核 我的问题是,因为我没有为密码或审核字段提供值,所以它们提交时使用空值 这是我的帖子: [HttpPost] public ActionResult Edit(User user) { if (ModelState.IsValid) { try {

我正在基于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);
}
因此,当我提交时,因为我不想更改密码,所以我将其留空,这意味着模型将获得一个空值


如何确保我没有更改的字段不会被更新?

首先,您应该在表单中提供一些隐藏字段,用于存储实体的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教程中详细说明这一点。