2012-11-16 30 views
0

您認爲處理刪除項目的最佳方法是什麼?MVC 4成功和失敗行爲的刪除動作

下面是我最初的想法的代碼示例,但問題是return RedirectToAction("Index")丟失了上下文,因此索引不知道角色無法刪除,因爲有用戶連接到它。

因此,如果它不能被刪除,我可以顯示一個消息包含在一個隱藏的div或甚至一個警告的方法,讓用戶知道爲什麼它不能被刪除,但索引應該知道問題。

我不想使用Session或ViewData。 我曾嘗試使用@Ajax.ActionLink(),但總是收到GET請求。

jQuery 1.7.1可供使用。

控制器

public ActionResult Delete(string roleName) 
{ 
    RoleProvider roleProvider = new SARoleProvider(); 
    bool isDelete = roleProvider.DeleteRole(roleName, true); 

    if (isDelete) 
    { 
     return RedirectToAction("Index"); 
    } 

    return RedirectToAction("Index"); 
} 

查看

@Html.ActionLink("Delete", "Delete", new { roleName = item.Role }, new { @class = "confirmDelete btn btn-danger btn-mini", onclick = "return confirm('Delete this item?');" }) 
+0

最簡單的解決方案是將存儲在所述的TempData詞典的消息,這將是可用的(僅)在後續請求。但是,這確實會使用會話狀態。 – eulerfx

+0

@eulerfx我也應該提到我不想使用TempData,但如果這是最好的方法,我可以看看它是否是一種經過批准的方法。 – iamchrisfryer

+0

也許這會幫助你:http://maxtoroq.blogspot.com/2012/08/implementing-delete-button-in-aspnet-mvc.html –

回答

0

我結束了使用jQuery後發送和接收,我需要根據項目是否可以刪除或沒有的信息。

Index.cshtml

<div class="alert alert-error" id="DeleteError"> 
    <a class="close" data-dismiss="alert">×</a> 
    <span>There was a problem deleting the Role. Please check that there are no Users in the Role and try again or contact an Administrator.</span> 
</div> 


@Html.Raw("<a href=\"javascript:deleteRole('" + item.Role + "');\" class=\"confirmDelete btn btn-danger btn-mini\">Delete</a>") 


<script type="text/javascript"> 

    $(document).ready(function() { 
     $('#DeleteError').hide(); 
    }); 

    function deleteRole(roleName) { 

     if (confirm('Delete the item?')) { 

      // Begin the request 
      $.post('@Url.Action("Delete")/?roleName=' + roleName, {}, function(data) { 
       if (data.IsDeleted) { 
        // Refresh the page 
        window.location.reload(); 
       } else if (data.IsError) { 
        $("#DeleteError").show(); 
       } 
      }); 
     } 
    } 
</script> 

Controller.cs

[OutputCache(Duration = 0)] 
    public JsonResult Delete(string roleName) 
    { 
     bool isError = false; 
     bool isDeleted = Roles.Provider.DeleteRole(roleName, true); 

     if (!isDeleted) 
     { 
      isError = true; 
     } 

     return Json(new { IsDeleted = isDeleted, IsError = isError }, JsonRequestBehavior.AllowGet); 
    }