我有以下Post Edit操作方法,其中包含[Bind]列表以限制模型绑定器将绑定的属性: -
[HttpPost]
public ActionResult Edit(Bind(Include="Note,DoctorID,VisitID,StatusID")] Visit visit)
{
if ((visit.EditableByAssingedDoctor(User.Identity.Name)) || (visit.EditableByCreatedBy(User.Identity.Name)))
{ try
{if (ModelState.IsValid)
{ entities.Entry(visit).State = EntityState.Modified;
repository.Save();
return RedirectToAction("Index"); } }
catch (DbUpdateConcurrencyException ex)
{ var entry = ex.Entries.Single();
var clientValues = (Visit)entry.Entity;
//code goes here
但是由于Visit对象包含未包含在绑定列表中的其他属性,所以我如何从数据库中检索Visit对象属性的当前值。 提示: - 我正在使用实体框架与数据库第一种方法。 BR
更新: - 这是获取编辑的行动方法: -
public ActionResult Edit(int id)
{
Visit visit = repository.GetVisit(id);
if ((visit.EditableByAssingedDoctor(User.Identity.Name)) || (visit.EditableByCreatedBy(User.Identity.Name)))
{
ViewBag.DoctorID = new SelectList(Membership.GetAllUsers(), "Username", "Username", visit.DoctorID);
ViewBag.StatusID = new SelectList(repository.FindAllVisitStatus(), "StatusID", "Description", visit.StatusID);
return View(visit);
}
else { return View("NotFound");}
}
答案 0 :(得分:0)
看起来只有Note是可编辑的,有时Status也可以编辑?基于your other related question。因为我不知道你的HTTPGet方法是什么样的,所以我在这里走出困境,而且我在EF中生锈了。
我排除了必要的检查,尝试/捕捉等......
var dbVisit = repository.GetVisit(visit.VisitId);
dbVisit.Note = visit.Note; // if this is permissible
if (dbVisit.IsEditable(...)){
... whatever is permissible here ...
}
repository.UpdateVisit(dbVisit); // possibly inside the if clause above
... etc ...