Kendo UI Grid Ajax 破坏成功

Posted

技术标签:

【中文标题】Kendo UI Grid Ajax 破坏成功【英文标题】:Kendo UI Grid Ajax Destroy Success 【发布时间】:2012-12-29 04:14:52 【问题描述】:

我对 KENDO UI 真的很陌生,我也有点困惑,因为我在使用 VB.Net 和 Kendo 并且翻译有点奇怪,所以说完这些让我们来回答这个问题。

我在 ASP.Net MVC 页面中使用 Kendo Grid,如下所示:

    @(html.Kendo().Grid(Of Portal.ProductList).Name("Grid2") _
    .DataSource(Function(ds) ds.Ajax() _
    .Model(Sub(model) model.Id(Function(p) p.ItemID)) _
    .Read(Function(read) read.Action("GetAjaxItems", "ShoppingCartItems").Data("gridParms")) _
    .Destroy(Function(destroy) destroy.Action("DeleteAjaxItems", "ShoppingCartItems", New With .ShoppingCartID = ViewData("ShoppingCartID"))) _
                                                ) _
    .Columns(Function(modelItem) modelItem.Bound(Function(p) p.ItemCodeOrdering).Title("Item")) _
    .Columns(Function(modelItem) modelItem.Bound(Function(p) p.Description)) _
    .Columns(Function(modelItem) modelItem.Bound(Function(p) p.Quantity).Title("Quantity").ClientTemplate("<input type='text' style='width:40px;' id='QTY#= ItemID #' value='#= Quantity #' /> &nbsp;<input type='button' id='UPD#= ItemID#' value='Update' onclick='updateItemQty(this)' /> ")) _
    .Columns(Function(modelItem) modelItem.Bound(Function(p) p.Price).Title("Unit Price").ClientTemplate("<div id='price#=ItemID#'>$#=Price.toFixed(2)#</div>")) _
    .Columns(Function(modelItem) modelItem.Bound(Function(p) p.Quantity).Title("Total Price").ClientTemplate("<div id='total#=ItemID#'>$#= (Price * Quantity).toFixed(2) #</div>")) _
    .Columns(Function(modelItem) modelItem.Bound(Function(p) p.ItemID)) _
    .Columns(Function(modelItem) modelItem.Command(Sub(cmd) cmd.Destroy()))
    )

我正在从 Destroy Ajax 调用返回一个值。我需要能够检索该值并使用来自 AJAX 调用的 Success 事件的订单总数更新页面上的另一个 div,但我无法确定如何拦截此事件。

基本上,此网格显示已订购的订单项,并且在页面底部有一个订单总数。当我们从订单上的已删除项目返回时,我想从控制器返回的值更新总数。我希望这是有道理的......

控制器

    <HttpPost()>
    Function DeleteAjaxItems(<DataSourceRequest()> request As DataSourceRequest, Optional ShoppingCartID As Integer = 0, Optional ItemID As Integer = 0) As ActionResult
        Dim sci = db.ShoppingCartItems.Where(Function(c) c.ShoppingCartID = ShoppingCartID And c.ItemID = ItemID)

        If Not IsNothing(sci.FirstOrDefault) Then
            db.ShoppingCartItems.Remove(sci.FirstOrDefault)
            db.SaveChanges()
        End If

        Dim ShoppingCartItems = db.ShoppingCartItems.Include(Function(s) s.ShoppingCart).Where(Function(s) s.ShoppingCartID = ShoppingCartID)
        Dim ShoppingCartItemsTotal = ShoppingCartItems.Sum(Function(item) item.DealerPrice * item.Quantity)

        Return New JsonResult With .Data = Format(ShoppingCartItemsTotal, "c")
        'Return Nothing

    End Function

【问题讨论】:

【参考方案1】:

您可以使用requestEnd 事件。返回服务器响应时引发。

【讨论】:

我添加了该事件,但该事件从未被触发。 @(Html.Kendo().Grid(Of MHPPortal.ProductList) _ .Name("Grid2") _ .DataSource(Function(ds) ds.Ajax() _ .Model(Sub(model) model.Id(Function( p) p.ItemID)) _ .Read(Function(read) read.Action("GetAjaxItems", "ShoppingCartItems").Data("gridParms")) _ .Destroy(Function(destroy) destroy.Action("DeleteAjaxItems" , "ShoppingCartItems", 新的 .ShoppingCartID = ViewData("ShoppingCartID"))) _ .Events(Function(e) e.RequestEnd("OnRequestEnd")) ) _ 好的,我添加了 RequestStart,它会在我的网格加载时触发,但是在从网格中删除一个行项目后,RequestEnd 永远不会触发? 正确的答案是使用 requestEnd,虽然我永远无法让它工作,但该事件从未触发。我找到了另一种绕过允许网格处理销毁的解决方案,我手动管理了销毁。

以上是关于Kendo UI Grid Ajax 破坏成功的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Kendo UI Grid 中为不同的页面设置不同的页面大小

ajax post回调后如何刷新Kendo Ui网格

Kendo Grid 数据源刷新在 IE 中不起作用

如何使用 Kendo UI Grid 的 SetDataSource 方法

Kendo UI 网格复选框列

Kendo UI Grid - 如何将类添加到生成的表中