2011-03-23 19 views
1

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

问题是,由于我没有提供[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

使用删除链接创建一个隐藏窗体作为操作。当用户确认提交:

<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。所有你需要做的就是将表单,脚本和“删除”类添加到你的删除链接。表单处理是为所有链接自动完成的。

+0

这不是我的实际问题,我的问题是即使我指定'FormMethod.Post',它无法找到我的控制器上的删除操作方法,但我确信URL路由工程很好,因为当我有[ HttpGet]删除它工作正常。 – 2011-03-23 09:22:29

+0

用您的客户代码更新您的问题。我相信你的要求是不正确的,除非你能证明我错了。 – jgauffin 2011-03-23 09:29:13

+0

现在有效:) – 2011-03-23 10:29:19

1

我想你想使用RedirectToAction()这将让浏览器做适当的GET requets到你指定的任何控制器/行动。这也通过在浏览器上刷新并重新提交POST来减轻用户意外提交提交请求两次的风险。