0

オブジェクトのリストと、各オブジェクトの横に Ajax.action の削除リンクを表示する次のインデックス ビューがあります。

<legend>@Model.Where(d => d.VisitStatu.Description.ToUpper().Equals("ASSINGED")).Count() @ViewBag.subtitle</legend>
<table>
    <tr>   
        <th>Patient Full Name </th>

         <th>Created BY</th>
        <th></th>
    </tr>

@foreach (var item in Model.Where(d => d.VisitStatu.Description.ToUpper().Equals("ASSINGED")))
{
    <tr id = @item.VisitID>           
        <td>@Html.DisplayFor(modelItem => item.Patient.FullName)</td>
        <td>@Html.DisplayFor(modelItem => item.CreatedBy)</td>
        <td>@Ajax.ActionLink("Delete",
       "Delete", "Visit",
      new { id = item.VisitID },
    new AjaxOptions
{
    HttpMethod = "Post",
    OnSuccess = "deletionconfirmation",
    OnFailure = "deletionerror"
}
</td>  </tr>

ここで、Ajax.actionlink は次のポスト アクション メソッドを呼び出します:-

        [HttpPost]
        public ActionResult Delete(int id)
        {            try
            {  var v = repository.GetVisit(id);
                if (!(v.Editable(User.Identity.Name)))
                {return View("NotFound");                }
                repository.DeleteVisit(v);
                repository.Save();
return Json(new { IsSuccess = "True", id = id, description = v.Date.ToString() }, JsonRequestBehavior.AllowGet);
            }
            catch (DbUpdateConcurrencyException)
            {
return Json(new { IsSuccess = "False" }, JsonRequestBehavior.AllowGet);

            }
            catch (OptimisticConcurrencyException)
            {
                return Json(new { IsSuccess = "False" }, JsonRequestBehavior.AllowGet);

            }}

しかし、現在、ユーザーが削除リンクをクリックし、レコードが別のユーザーによって変更された場合DbUpdateConcurrencyException、削除アクションメソッドにタイムスタンプを渡していないため、no が発生します...そのため、タイムスタンプ値をajax.actionlink を削除しますか? // オブジェクトに既にタイムスタンプ プロパティが含まれていることを示します。ブラジル

4

1 に答える 1

1

ID を渡すのと同じ方法で、クエリ文字列パラメーターとして渡すことができます。

@Ajax.ActionLink(
    "Delete",
    "Delete", 
    "Visit",
    new { 
        id = item.VisitID,
        timestamp = item.Timestamp
    },
    new AjaxOptions
    {
        HttpMethod = "Post",
        OnSuccess = "deletionconfirmation",
        OnFailure = "deletionerror"
    }
)

次に、コントローラーの削除アクションにtimestampパラメーターを取らせます。

于 2012-04-26T07:28:36.207 に答える