Kendo Datasource.Data() equals Datasource.View()



我使用Kendo UI已经有一段时间了,我偶然发现了无法解释的行为

当您访问时http://demos.telerik.com/kendo-ui/grid/remote-data-binding在网格上,您可以看到总共830个元素。

当你转到控制台并运行时

$("#grid").data("kendoGrid").dataSource.view()

您将收到一个由20个元素组成的数组(如预期)。当你运行时

$("#grid").data("kendoGrid").dataSource.data()

您将收到相同的20个元素的数组。我试着玩过滤器,根据我的经验,data()的行为与view()完全相同,这很奇怪。就我对文档的理解而言,使用view()时我应该接收20个元素,但使用data()时我应该收到所有830个元素

我做错什么了吗?数据是否在后端过滤元素(并分页)?作为参考,这是我的后端方法,它为我的网格返回数据

public ActionResult IndexDataSource([DataSourceRequest] DataSourceRequest request)
{
    var customers = this.GetViewModel();
    return this.Json(customers.ToDataSourceResult(request));
}

请注意,在本例中,serverFiltering属性设置为true(还有serverPaging、serverSorting)。因此,在javaScript方面,无论您使用view()或data()方法,都将始终拥有相同的数据。它将是控制器的acton返回显示的相同数组:一个,选定的页面。为了让view()像文档一样工作,你必须关闭我所说的所有属性,并读取一堆完整的数据。

显式设置。MVC语法中的ServerOperation(false)解决了问题。我要感谢j4ro为我提供了这个选项。

@(Html.Kendo().Grid<Model>()
  .Name("Grid")
  .Columns(columns =>
      {
          ...
      })
  .Sortable()
  .Filterable()
  .Resizable(r => r.Columns(true))
  .Events(e => e.DataBound("CustomerGridDataBound"))
  .Pageable(pageable => pageable
            .Refresh(true)
            .PageSizes(new[] { 5, 50, 200, 99999 })
            .ButtonCount(5))
  .DataSource(dataSource => dataSource
            .Ajax()
            .PageSize(5)
            .ServerOperation(false)   // you need to add this to be able to use .data()
            .Read(read => read.Action("ActionDataSource", "Controller"))
  ))

最新更新