0

テレリックの ajax 削除イベントを使用して、テレリック mvc グリッドからレコードを削除しようとしています。クライアントイベントも定義onDeleteしました。ここでは、いくつかのことを検証し、それに基づいてレコードを削除したいので、クライアント側のonDelete機能は次のようになります

function onDelete(e) {
    if (confirm("Are you sure you want to delete?")) {

        $.getJSON('@Url.Action("GetStatus", "MyController")', { UserId: e.dataItem.UserId}, function (status) {
            if (status == 0) {
                return true;
            }
            else if (status == 1) {
                return confirm("Status 1, sure you want to delete?");
            }
            else {
                alert("Status 2, cannot be deleted");
                return false;
            }
        });
    }
    else {
        return false;
    }
}

グリッド側では、このようなものがあります

.DataBinding(dataBinding => dataBinding.Ajax()
.Delete("_Delete", "MyController"))
.ClientEvents(events => events.OnDelete("onDelete"))

問題は、最初の確認でキャンセルを選択すると、レコードが削除されないことです。しかし、削除してもOKと言うと、さらなる検証(ajax応答を通じて行っている)を待たずにレコードを削除します。

私が単に置くreturn trueか、return falseそれが機能するかどうか。

ajax の応答を待っていないようです。回避策はありますか?

4

1 に答える 1

0

この要件については、このことを手動で管理する必要があります。

以下のコード スニペットを試してみてください。

意見

マークアップ

@(Html.Telerik().Grid<TelerikMvcApplication1.Models.Order>()
    .Name("Grid")
    .Columns(columns =>
    {
        columns.Bound(o => o.OrderID);
        columns.Bound(o => o.OrderName);
        columns.Bound(o => o.OrderID)
           .ClientTemplate("<a onclick='DeleteOrder(<#= OrderID #>)' class='t-button'>Delete</a?")
           .Title("Picture");

    })
    .DataBinding(dataBinding => dataBinding.Ajax().Select("_AjaxBinding", "Home"))
    .Pageable()
    .Sortable()
    .Scrollable()
    .Groupable()
    .Filterable()
)

JS

function DeleteOrder(OrderID) {
    if (confirm("Are you sure you want to delete?")) {
        $.getJSON('@Url.Action("GetStatus", "Home")', { OrderID: OrderID }, function (status) {
            if (status == 0) {
                ConfriMDelete(OrderID);
            }
            else if (status == 1) {
                if (confirm("Status 1, sure you want to delete?")) {
                    ConfriMDelete(OrderID);
                }
                else {
                    return false;
                }
            }
            else {
                alert("Status 2, cannot be deleted");
                return false;
            }
        });
    }
    else {
        return false;
    }
}

function ConfriMDelete(OrderID) {
    $.getJSON('@Url.Action("_Delete", "Home")', { OrderID: OrderID }, function (status) {
        var grid = $("#Grid").data("tGrid");
        grid.ajaxRequest();
    });
}

コントローラ

    [GridAction]
    public ActionResult _AjaxBinding()
    {
        return View(new GridModel<Order>
        {
            Data = GetOrders()
        });
    }

    protected List<Order> GetOrders()
    {
        List<Order> orders = new List<Order>();

        for (int i = 0; i < 5; i++)
        {
            Order o1 = new Order();
            o1.OrderID = i;
            o1.OrderName = "Name" + i;
            orders.Add(o1);
        }

        return orders;
    }

    public ActionResult GetStatus(int OrderID)
    {
        //your code
    }

    public ActionResult _Delete(int OrderID)
    {
        // perform delete

        return Json(new { status = 1 });
    }
于 2013-08-09T11:40:23.813 に答える