5

KendoUI 添加的扩展方法(ToDataSourceResult)似乎在 Pages > Page #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 个整数作为属性。

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

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

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

我检查了 DataSourceResult 对象的内容,它的数组属性“数据”为空。

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

一些附加信息:

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

感谢您的帮助 SO 社区

4

1 回答 1

11

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

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

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

于 2013-01-12T17:42:06.787 回答