ToDataSourceResult扩展不填充DataSourceResult对象

时间:2013-01-12 17:31:23

标签: asp.net-mvc kendo-ui

KendoUI添加的扩展方法(ToDataSourceResult)似乎在Pages>上失败了。第1页。它在第一次加载页面时工作正常,但是当我尝试使用它进行虚拟滚动时,为了获取页面,2,3,4 ... N异步,该方法忽略了我正在尝试的IEnumerable对象中的所有数据改造。

我的代码如下:

我有一个MVC控制器,可以像这样获取数据:

Database database = Database.GenerateDatabase();
ResultSet queryResults = database.GetEvents( 
    FilterHelper.GenerateQueryCriteria((List<IFilterDescriptor>) request.Filters, request.Page, request.PageSize) 
);

Database.GetEvents返回如下对象:

public class ResultSet {

    public List<ResultSetRow> Set;
    public int PageRowCount;
    public int TotalRecordCount;
}

每个ResultSetRow是一个类的实例,它有1个字符串,2个int作为属性。

此时,我设置了一个断点并检查ResultSet.Set的内容。数据库使用request.PageSize指定的记录正确填充List。我已确认正在为任何和所有页码返回结果。

下一阶段,一切都很糟糕:

DataSourceResult result = ((IEnumerable<ResultSetRow>) queryResults.Set).ToDataSourceResult(request);

我检查DataSourceResult对象的内容及其数组属性&#39; Data&#39;是空的。

为什么我的模型(ResultSetRow)无法转换为Kendo的DataSourceResult对象?

其他一些信息:

  • 未使用聚合,组,排序和过滤器。
  • Database.GetEvents返回的结果数与所请求页面的大小相匹配。

感谢您的帮助SO社区

1 个答案:

答案 0 :(得分:11)

使用ToDataSourceResult()的主要原因是它在数据库服务器上运行过滤/排序/分组/分页。因此,当给定尚未执行的IQueryable时,它最有效。

它适用于IEnumerable,但是你必须将整个表加载到内存中,这是不可扩展的。

因为你只获得了一页的数据,所以当调用ToDataSourceResult时,它认为这是数据库中的所有数据,因此返回第一个以外的页面的空列表。