2011-03-23 21 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來減輕用戶意外提交提交請求兩次的風險。