前言:
我正在使用 MVC 5 开展项目。我们已经构建了database
model
,我们创建了Controllers
。然后,我们使用脚手架添加了Views
和exception
。但是在视图中我们省略了一些属性(它们不应该显示给用户)。
的问题:
在编辑等操作中,当我点击保存按钮(更新模型)时遇到[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 :
非常感谢以简单方式表达的答案。
答案 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);
}