我正在使用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,有什么办法可以保存这些值,并在数据库表中更新这些值。请帮助
答案 0 :(得分: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);
}
答案 1 :(得分:0)
是的,有办法。使用要在模型上保留的数据向视图添加隐藏字段,在这种情况下ProjectActivityDetail
,这样属性将绑定到模型绑定阶段上的projectactivitydetail
变量。
假设您添加了一个名为CreatedOn
的属性,该属性被设置为null:
@Html.HiddenFor(model => model.CreatedOn)
然后,当您提交表单时,CreatedOn
上最初的值将绑定到projectactivitydetail
的属性,您的模型将保存得很好。您的字段将更新为null,因为模型绑定未找到任何值。