2014-10-18 63 views
1

我一直在工作与剑道UI一段时间Datasource.View()和我已经在行为绊倒当您在网格您访问http://demos.telerik.com/kendo-ui/grid/remote-data-binding我无法解释剑道Datasource.Data()等于

可以看到总计830个元素。

当你去安慰和运行

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

您会收到20个元素的数组(如预期)。当您运行时

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

您会收到相同20个元素的数组。我尝试使用过滤器,根据我的经验,.data()的行为与view()完全相同,这很奇怪。据我了解文件,我应该收到20元素时使用view(),但我应该收到所有830使用数据时()

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

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

回答

0

显式设置.ServerOperation(false)在MVC语法中解决的问题。我想感谢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")) 

)) 
2

请注意,在这个例子中,serverFiltering属性被设置为真(和serverPaging,serverSorting也)。所以在javaScript方面,无论使用view()方法还是data()方法,都会有相同的数据。它将是控制器的动作返回显示的相同数组:一个选定的页面。 要使view()像文档一样工作,你必须关闭我所说的所有属性,并读取整个数据。

+0

对于基于JavaScript的代码来说这是真的,但我使用的是MVC语法,并没有在那里设置。我会尝试明确地将其设置为false,并检查这是否会有所帮助。 – 2014-10-19 19:48:18

+0

它应该以同样的方式工作(强调'应该')。 MVC只是通过C#生成JavaScript代码,并以相同的方式剪裁和渲染组件。您在JS中只能访问控制器首先读取的数据,并且服务器过滤会强制可分页的网格单独读取每个页面。当使用data()或view()方法时,网格的数据源不会向控制器询问任何其他数据。 – 2014-10-19 20:00:07

+0

是的,你是对的。此选项默认设置为true,如果我明确设置,它将正确运行 – 2014-10-19 20:16:29