0

我正在尝试使用 Telerik 的 ajax 删除事件从 Telerik 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"))

问题是如果我在第一次确认时选择取消,它不会删除记录。但是,如果我说可以删除,那么它不会等待进一步的验证(我正在通过 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 回答