使用Ajax.ActionLink执行正确的HTTP删除时出现问题

时间:2011-08-03 21:45:12

标签: asp.net-mvc ajax actionlink http-delete

我正在尝试做什么: 尝试使用“正确的”HTTP删除删除记录。

控制器代码:

    [HttpDelete]
    public void DeleteRun(int RunId)
    {
        repository.RemoveEntry(RunId);

    }

Razor查看:

             @Ajax.ActionLink("Delete","DeleteRun",new {RunId = run.RunId},
                         new AjaxOptions() { Confirm = "Are you sure you want to delete this entry?",
                                            HttpMethod = "DELETE",
                                            OnComplete = string.Format("DeleteRunInTable({0})",run.RunId)

                         })

Javascript(在单独的包含文件中):

   function DeleteRunInTable(RunId) {
       $("tr[data-runid=" + RunId).remove();
}

链接actionlink方法正在创建:

 <a data-ajax="true" data-ajax-complete="DeleteRunInTable(11)" data-ajax-confirm="Are you sure you want to delete this entry?" data-ajax-method="DELETE" href="/Runs/Delete/11">Delete</a>

不确定javascript部分是否有效但不担心它。试着一次迈出一步:)。现在它只是像传统标签一样工作,当我点击链接时它只是做一个href的GET请求。当然我得到了404错误,因为我把[HTTPDelete]放在我的控制器上。我对Web开发很陌生,所以我确信在javascript或jquery中还有其他方法可以做同样的事情,但我只是在做我现在知道的事情。

2 个答案:

答案 0 :(得分:9)

这应该像我最近自己做的一样,我所要做的就是在HttpMethod参数中指定AjaxOptions

您还需要确保页面上包含 jquery.unobtrusive-ajax.js 脚本。

答案 1 :(得分:4)

这实际上是一个简单的解决方案......我错过了jquery.unobtrusive-ajax.min.js:P。我要离开这里的帖子,所以任何试图做类似于我正在做的事情的人都知道它可能只是确保你包括jquery&amp; jquery.unobtrusive。

编辑:只是为了澄清如果使用MVC3,ActionLink可以与JQuery一起使用,否则它会使用microsoft javascript库。