0

我有一个WebGrid和一个链接,用于在这样PartialView定义的内部删除行 -

@Html.ActionLink("Delete", "DeleteThis", "MyController", new { id = SelectedId }, null)
<div id="MyGrid">
@{
    var grid = new WebGrid(Model.ListOfStuff, canSort: true, ajaxUpdateContainerId: "MyGrid");   


    @grid.GetHtml()
}
</div>

选择网格上的项目后,用户可以单击“删除”链接从数据库中删除该行。

我的问题是,我想让该调用成为Ajax调用在删除后更新网格。我的排序以 Ajax 方式工作,但我不知道如何让“删除”与 Ajax 一起工作。我的控制器代码如下所示 -

    public ActionResult Index()
    {
        //CODE TO RETRIEVE THE MODEL

        return PartialView("Index", model);
    }

    public ActionResult DeleteThis(string id)
    {
        ////CODE TO DELETE RECORD

        return RedirectToAction("Index");  // I ALSO TRIED return PartialView("Index", model)         }

任何见解将不胜感激。谢谢!

4

1 回答 1

0

侦听链接的单击事件并对执行删除功能的操作方法进行 ajax 调用。

确保您的DeleteThis方法用HttpPost属性装饰。删除应该始终是一个HttpPost操作。不是 GET 操作。

[HttpPost]
public ActionResult DeleteThis(string id)
{
  try
  {
  // to do : delete
   return Json(new { Status="Deleted"});
  }
  catch(Exception ex)
  {
    //log the error
   return Json(new { Status="Error"});
  } 
}

从您的 Action 方法中,您将返回一个 JSON。在您的 post 方法的回调中,检查 Status 属性值以查看删除操作是否成功。

$(function(){

  $("#SelectedId").click(function(e){
    e.preventDefault();

    var selectedItemId=34; // you need to get this from the grid;

    $.post("@Url.Action("DeleteThis","Home")/"+selectedItemId,function(data){
         if(data.Status="Deleted")
         {
          //reload the page or just reload the partial view as needed
          window.location.href=window.location.href;
          // $("#GridContainer").load(@Url.Action("List","Users")");
         }
    });

  });

});
于 2013-03-22T20:45:36.877 回答