0

次の編集後アクションメソッドがあります。これには、モデルバインダーがバインドするプロパティを制限する[バインド]リストが含まれています。-

 [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 Objectにはバインドリストに含まれていない他のプロパティが含まれているため、Visitオブジェクトプロパティの現在の値をデータベースから取得する方法を説明します。ヒント:-データベースファーストアプローチでエンティティフレームワークを使用しています。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 には慣れていません。

必要なチェック、try/catch などを除外しています...

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 に答える