0

我有以下 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

但是由于访问对象包含绑定列表中未包含的其他属性,所以我如何从数据库中检索访问对象属性的当前值。提示:- 我正在使用实体框架和数据库优先方法。BR

更新:- 这是 GET EDIT 操作方法:-

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");}
            }
4

1 回答 1

0

看起来只有注释是可编辑的,除了有时状态也是可编辑的?根据您的其他相关问题。因为我不知道你的 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 ...
于 2012-04-26T14:36:57.630 回答