Kendo网格虚拟滚动(无限滚动)不起作用

时间:2014-12-03 17:24:30

标签: asp.net-mvc-3 kendo-ui kendo-grid kendo-asp.net-mvc

我想打开剑道网格上的无休止滚动,在此框架中称为virtual scrolling

摘要:

1) I load the page => the Action Virtualization_Read is called (OK)
2) I scroll down the Grid till bottom => the Action Virtualization_Read is called anothter time in order to get more data (KO)

结果是,当我使用滚动条到达网格的底部时,不会再触发用于检索数据的Action方法。

这是我的网格,它显示了我的应用程序中生成的跟踪:

@(Html.Kendo().Grid<Credit.Entity.ServiceObjects.MsgBlock>(Model.ListadoTrazas)
                                    .Name("grdTrazas")
                               .Columns(columns =>
                               {
                                   columns.Bound(c => c.LogID).Filterable(true);
                                   columns.Bound(c => c.Timestamp).Filterable(false);
                                   columns.Bound(c => c.FormattedMessage).Filterable(false).Width("80%");

                               })
                               .Scrollable(s => s.Virtual(true))
                               })

                               .DataSource(dataSource => dataSource
                                    .Ajax()
                                    .PageSize(100)
                                    .ServerOperation(true)
                                    .Read(read => read.Action("Virtualization_Read", "Logging"))
                                 )

                                )

这是获取数据的MVC3 Action。只有在第一次加载页面时才会调用此Action:

public ActionResult Virtualization_Read([DataSourceRequest] DataSourceRequest request)
    {
        return Json(GetData(request.Page, request.PageSize).ToDataSourceResult(request));
    }

    [NonAction]
    private List<MsgBlock> GetData(int page, int getCount)
    {
        MVCLogging model = new MVCLogging();

        // Fetches the data
        return model.ListadoTrazas;
    }

Model MsgBlock具有Grid Columns方法中定义的相同属性:

  • LOGID
  • 时间戳
  • FormattedMessage

我忘了什么吗?

1 个答案:

答案 0 :(得分:1)

我在这里看到的唯一潜在问题是您正在利用网格上的服务器操作,但是使用一组数据初始化网格,而不是让它获取初始数据。在使用MVC扩展进行虚拟化的Kendo演示中,网格定义如下所示:

@(Html.Kendo().Grid<Kendo.Mvc.Examples.Models.OrderViewModel>()
.Name("grid")
.Columns(columns =>
{
    columns.Bound(o => o.OrderID).Width(60);
    columns.Bound(o => o.CustomerID).Width(90);
    columns.Bound(o => o.ShipName).Width(220);
    columns.Bound(o => o.ShipAddress).Width(280);
    columns.Bound(o => o.ShipCity).Width(110);
    columns.Bound(o => o.ShipCountry).Width(110);
})
.Sortable()
.Scrollable(scrollable => scrollable.Virtual(true))
.HtmlAttributes(new { style = "height:430px;" })
.DataSource(dataSource => dataSource
    .Ajax()
    .PageSize(100)
    .Read(read => read.Action("Virtualization_Read", "Grid"))
 )
)

请注意,在提供类型后(Kendo.Mvc.Examples.Models.OrderViewModel),没有提供初始数据集,而初始化尝试为网格提供需要呈现的数据(Model.ListadoTrazas)。也许这让网格混淆,认为它有所有数据需要?我会尝试取出Model.ListadoTrazas并让网格从get get中获取数据。