0

我正在开发 MVC 应用程序并使用 Entity Framework 4.0 进行数据库连接。在编辑记录时,我想更新表中的一些字段。编辑代码是

   [HttpPost]
    public ActionResult Edit(ProjectActivityDetail projectactivitydetail, FormCollection formcollection)
    {
        if (ModelState.IsValid)
        {
            string value = Request["ChkIntBool"];
            if (value.Substring(0, 4) == "true") { projectactivitydetail.IsApproved = 1; } else { projectactivitydetail.IsApproved = 0; }
            projectactivitydetail.ProjectActivityDID = long.Parse(Session["ProjectActivityDID"].ToString());
            projectactivitydetail.UpatedBy = long.Parse(Session["UserID"].ToString());
            projectactivitydetail.UpdatedON = System.DateTime.Now;
            db.Entry(projectactivitydetail).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        ViewBag.FK_ProjectActivityID = new SelectList(db.ProjectActivityMasters, "ProjectActivityID", "ActivityName", projectactivitydetail.FK_ProjectActivityID);
        return View(projectactivitydetail);
    }

我只想更新这些字段,但是当这执行我的其他字段更新为 null 时,有什么办法可以保持这些值不变并更新数据库表中的这些值。请帮助

4

2 回答 2

0

看起来传递给服务调用的实体不完整。我的建议是找到现有实体并对其进行更改,而不是附加传入的实体:

[HttpPost]
public ActionResult Edit(ProjectActivityDetail projectactivitydetail, FormCollection formcollection)
{
    if (ModelState.IsValid)
    {
        //I'm assuming the PK of the entity is id so adjust for that
        var entity = db.Set<ProjectActivityDetail>().Find(projectactivitydetail.id);
        string value = Request["ChkIntBool"];
        entity.IsApproved = value.Substring(0, 4) == "true" ? 1 : 0;
        entity.ProjectActivityDID = long.Parse(Session["ProjectActivityDID"].ToString());
        entity.UpatedBy = long.Parse(Session["UserID"].ToString());
        entity.UpdatedON = System.DateTime.Now;
        db.Entry(entity).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    ViewBag.FK_ProjectActivityID = new SelectList(db.ProjectActivityMasters, "ProjectActivityID", "ActivityName", projectactivitydetail.FK_ProjectActivityID);
    return View(projectactivitydetail);
}
于 2013-04-11T13:55:00.373 回答
0

是的,有办法。将隐藏字段添加到您的视图中,其中包含您想要保留在模型上的数据,在这种情况下ProjectActivityDetail,这样属性将projectactivitydetail在模型绑定阶段绑定到变量。

假设您有一个名为的属性CreatedOn被设置为 null,您将在视图中添加:

@Html.HiddenFor(model => model.CreatedOn)

然后,当您提交表单时,最初的值CreatedOn将绑定到属性 atprojectactivitydetail并且您的模型将被很好地保存。您的字段正在更新为 null,因为模型绑定没有为它们找到任何值。

祝你好运。

于 2013-04-11T13:58:37.813 回答