仅使用[HttpPost]操作方法删除

时间:2011-03-23 09:03:34

标签: asp.net-mvc asp.net-mvc-3 routing http-post

我想提供删除记录的能力,但只有[HttpPost]动作方法,我的意思是,我不希望另一个视图确认删除,只有javascript确认会很好。

问题是因为我没有提供[HttpGet]动作方法,所以控制器不能将URL指向[HttpPost]动作方法,而是当我点击删除链接时它会给出404 Not Found响应。

这是我的行动方法:

// Note that there is no [HttpGet] delete action method

[HttpPost]
public ActionResult Delete(string name)
{
    var village = Villages.FirstOrDefault(v => v.Name == name && v.Deleted == false);

    if (village == null)
        return View("Error");

    village.Deleted = true;
    dc.SubmitChanges();

    return RedirectToRoute(new { action = "Index" });
}

2 个答案:

答案 0 :(得分:2)

使用删除链接作为操作创建隐藏表单。用户确认时提交:

<form method="post" id="deleteForm" action="">
</form>

<script type="text/javascript">
$('document').ready(function() {
    $('a.delete').click(function(){
        if (confirm('You sure?')) {
            $('#deleteForm').attr('action', uri);
            $('#deleteForm').submit(); //jquery
        }
        return false;
    });
});
</script>

<a href="/user/remove/5" class="delete">Delete</a>

<强>更新

将脚本转换为jquery。您需要做的就是将表单,脚本和“删除”类添加到删除链接。表格处理自动完成所有链接。

答案 1 :(得分:1)

我认为您希望使用 RedirectToAction(),这将使浏览器针对您指定的任何控制器/操作进行相应的GET请求。这还可以通过点击浏览器刷新并重新提交POST来减少用户意外提交提交请求的风险。