如何更新“编辑”操作中的某些属性

时间:2014-06-22 05:45:08

标签: c# asp.net asp.net-mvc database asp.net-mvc-scaffolding

前言

我正在使用 MVC 5 开展项目。我们已经构建了database model,我们创建了Controllers。然后,我们使用脚手架添加了Viewsexception。但是在视图中我们省略了一些属性(它们不应该显示给用户)。
问题
在编辑等操作中,当我点击保存按钮(更新模型)时遇到[HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit([Bind(Include = "AreaCode,Tels,Address")] Area area) {//Area has many more properties (defined as required in the database) and I just need to update //these : AreaCode,Tels,Address if (ModelState.IsValid) { db.Entry(area).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.Detector = new SelectList(db.Detectors, "DetectorCode", "detectorName", area.Detector); ViewBag.Grade = new SelectList(db.Grades, "Gradeid", "GradeName", area.Grade); return View(area); } ,我认为它需要我提供所有属性的值。

请让我知道如何更新一些属性(在视图中显示)? 请注意,我需要尽可能通用的解决方案,以便能够在我在此项目中的许多编辑操作中使用它(确实这是困难的部分)。
代码
以下是我认为与此问题最相关的一些代码:

{{1}}

SS

enter image description here

非常感谢以简单方式表达的答案。

1 个答案:

答案 0 :(得分:1)

从数据库中获取对象的更新,并使用旧的属性值

设置模型

public ActionResult Edit([Bind(Include =“AreaCode,Tels,Address”)] Area area)     {

YourDbContext _db= new YourDbContext();
Area oldArea = _db.Areas.Where(x => x.ID == area.ID).FirstOrDefault();


  // Bind others properties marked with required from database 
   area.x = oldArea.x;
   area.y = oldArea.y;


if (ModelState.IsValid)
{
    db.Entry(area).State = EntityState.Modified;
    db.SaveChanges();
    return RedirectToAction("Index");
}
ViewBag.Detector = new SelectList(db.Detectors, "DetectorCode", "detectorName", area.Detector);
ViewBag.Grade = new SelectList(db.Grades, "Gradeid", "GradeName", area.Grade);
return View(area);

}