ASP.NET MVC - Kendo Grid慢速分页

问题描述 投票:1回答:3

我正在使用Kendo Grid来显示我的数据,但是当我加载500K记录时,分页很慢。更改页面时,将调用Read函数,从而调用数据库,每次都会检索所有500K记录。

视图

@Html.Kendo().Grid<MyViewModel>()
        .Name("grid")           
        .Columns(c=>
        {           
            c.Bound(model => model.UserId);
            c.Bound(model => model.UserName);
            c.Bound(model => model.Email);
        })
        .Filterable()
        .Sortable()           
        .DataSource(dataSource => dataSource
            .Ajax()
            .Read(read => read.Action("ReadData", "Home").Data("filters"))
            .PageSize(30)            
        )                   

调节器

public ActionResult ReadData([DataSourceRequest] DataSourceRequest request, string searchText)
{
    var data = GetData(searchText).ToList();

    return Json(data.OrderBy(x=>x.UserId).ToList().ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}

我能做错什么?

c# asp.net-mvc kendo-ui kendo-grid kendo-asp.net-mvc
3个回答
1
投票

我建议首先尝试在数据端而不是代码上执行订单,看看是否有帮助。但是,如果您每次用户更改页面时检索500k记录并移动它们,我认为这不会解决问题。这就是客户端分页在kendo中的工作方式。

第二种选择是建立寻呼服务器端。您可以查看此帖子,了解如何实现:

How to implement Server side paging in Client side Kendo UI grid in asp.net mvc

关于kendo网格性能和分页的来源:https://www.telerik.com/blogs/how-to-get-the-best-grid-performance

希望能帮助到你!


0
投票

为什么你不能使用Endless Scrolling,每次向下滚动时都需要一堆记录(你可以根据需要选择)?

参考链接:https://demos.telerik.com/aspnet-mvc/grid/endless-scrolling-remote


0
投票

遇到这个研究一个不同的问题,但你的问题很清楚:你正在做.ToList(),这导致在.ToDataSourceResult启动分页和排序之前获取所有记录(它需要IQueryable)。

因此,您的GetData需要将IQueryable和refactor操作返回到:

public ActionResult ReadData([DataSourceRequest] DataSourceRequest request, string searchText)
{
    var data = GetData(searchText);

    // Add a default sort if none is selected, otherwise use the user selected sort
    if (request.Sorts.Count == 0)
    {
        request.Sorts.Add(new SortDescriptor("UserId", ListSortDirection.Ascending));
    }

    // Will add `Take`, `Skip`, `OrderBy`, etc. before sending to server
    return Json(data.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
© www.soinside.com 2019 - 2024. All rights reserved.