2010-09-14 130 views
6

在MVC中刪除項目的最佳方法是什麼?我有一個項目列表。每行將包含一個「刪除」鏈接。我希望刪除鏈接提示進行確認,然後從數據存儲中刪除項目並使用新數據刷新頁面。如何使用ASP.Net刪除項目MVC

這裏是我的視圖代碼:

  <%: Ajax.ActionLink(
       "Delete" 
       ,"Delete" 
       , new { id=item.FooId} 
       , new AjaxOptions() 
       { 
        Confirm="Are you sure that you want to delete this item?" 
        , HttpMethod = "post"}) %> 

這裏是我的控制器代碼:

[HttpPost] 
    public ActionResult Delete(int id) 
    { 
     try 
     { 
      var success = FooService.Deletefoo(id); 
      return RedirectToAction("Index"); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 

記錄被刪除,但該網頁不刷新。我唯一能想到的是RedirectToAction只適用於不同的頁面,而不是相同的頁面。

如何獲取頁面刷新?

+1

備註:請不要使用異常來控制邏輯流程。出於多種原因,這是不好的做法。 – David 2010-09-14 17:06:43

回答

6

由於AJAX調用不會使用302,因此您的頁面不會刷新 - 在整個瀏覽器刷新時使用RedirectToAction()。如果你打算使用AJAX作爲你的刪除鏈接,那麼查看所有示例代碼的this post。完成後,它會執行一個javascript window.location.reload();以刷新頁面。這遵循PRG pattern.

另一種方法是使用不使用AJAX。這是an example。總的來說,你很好的堅持你的AJAX方法。

+0

該問題的良好解釋以及完整解決方案的鏈接。謝謝。 – John 2010-09-14 17:57:56

0

另一種方法是通過javascript刪除該控件/ html元素。當您的Ajax請求完成時,您可以調用此腳本。

<%: Ajax.ActionLink(
       "Delete" 
       ,"Delete" 
       , new { id=item.FooId} 
       , new AjaxOptions() 
       { 
        OnSuccess="deleteElement" 
        ,Confirm="Are you sure that you want to delete this item?" 
        , HttpMethod = "post"}) %> 

OnSuccess選項告訴AJAX輔助當Ajax請求被成功地完成了調用該方法。