0

あなたの意見では、アイテムの削除を処理するための最良の方法は何ですか.

以下は私の最初の考えのコード例ですが、問題は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?');" })
4

1 に答える 1

0

jQuery の投稿を使用して、アイテムを削除できるかどうかに基づいて、必要な情報を送受信することになりました。

インデックス.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);
    }
于 2012-11-19T14:17:24.277 に答える