Kendo ui Kendo Datasource.Data()等于Datasource.View()

Kendo ui Kendo Datasource.Data()等于Datasource.View(),kendo-ui,telerik,datasource,Kendo Ui,Telerik,Datasource,我已经在剑道UI上工作了一段时间,我偶然发现了一些无法解释的行为 当您访问网格时,您可以看到总共830个元素 当您转到控制台并运行 $("#grid").data("kendoGrid").dataSource.view() 您将收到20个元素的数组(如预期的那样)。当你跑的时候 $("#grid").data("kendoGrid").dataSource.data() 您将收到由相同的20个元素组成的数组。根据我的经验,我尝试使用过滤器。data()的行为与view()完全相同,这很奇怪

我已经在剑道UI上工作了一段时间,我偶然发现了一些无法解释的行为

当您访问网格时,您可以看到总共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"))

  ))
@(Html.Kendo().Grid())
.名称(“网格”)
.列(列=>
{
...
})
.Sortable()
.可过滤()
.可调整大小(r=>r.Columns(true))
.Events(e=>e.DataBound(“CustomerGridDataBound”))
.Pageable(Pageable=>Pageable
.刷新(真)
.PageSizes(新[]{5,5020099999})
.按钮计数(5))
.DataSource(DataSource=>DataSource
.Ajax()
.页面大小(5)
.ServerOperation(false)//您需要添加此项才能使用.data()
.Read(Read=>Read.Action(“ActionDataSource”、“Controller”))
))

这对于基于javascript的代码是正确的,但我使用的是MVC语法,并且没有设置在那里。我将尝试明确地将其设置为false,并检查这是否有助于它以同样的方式工作(重点是“应该”)。MVC只是通过C#snipped生成javascript代码,并以同样的方式呈现组件。在JS中,您只能访问控制器首先读取的数据,服务器过滤强制分页网格单独读取每个页面。当使用data()或view()方法时,网格的数据源不会向控制器请求任何其他数据。是的,你是对的。默认情况下,此选项设置为true,如果显式设置,它将正常工作