我使用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"))
))