【问题标题】:igGrid with server-side paging not working带有服务器端分页的 igGrid 不起作用
【发布时间】:2016-09-22 20:55:47
【问题描述】:

我正在构建一个带有服务器端分页的 igGrid。网格连接到由 Visual Studio 使用实体框架自动生成的 OData v3 控制器。过滤和排序操作工作正常,但分页不是。

问题似乎是网格将 page=x 和 pageSize=y 放入查询字符串,但 OData 格式是 $top=x 和 $skip=y。注意仅仅改变names page和pageSize是不够的,因为$skip的值需要是index * pageSize。我尝试了多种编辑控制器以支持 page 和 pageSize 的方法,但无济于事。

我可以在浏览器的地址栏中手动键入具有 $top 和 $skip 功能的 OData 请求 URL,并获得所需的结果。有没有办法让 Grid 使用 $top 和 $skip?网格本身在 c# 控制器中定义并作为模型的一部分传递到页面中,我注意到因此我无法访问 GridPaging 对象的 pageIndexUrlKey 和 pageSizeUrlKey 属性。 grid.OData 设置为 true。

【问题讨论】:

  • 默认情况下,分页应该使用 $top 和 $skip 发送 OData 查询字符串。你能发布你的 igGrid 配置吗?
  • GridModel grid = new GridModel(); grid.EnableUTCDates = true; grid.ID = "membersGrid"; grid.FixedHeaders = false; grid.DefaultColumnWidth = "100px"; #region [ 分页 ] GridPaging 分页 = 新 GridPaging(); paging.Type = OpType.Remote;分页.PageSize = 10; paging.CurrentPageIndex = 0; paging.PageSizeList = new List { 10, 25, 50, 100 }; grid.Features.Add(分页); #endregion grid.DataSourceUrl = "/odata/viewMemberBalances"; grid.ResponseDataKey = "值"; grid.OData = true;
  • 感谢您的回复。这是让网格使用正确的查询字符串参数,但是仍然存在 2 个问题:1)当页面首次加载时,网格使用 page 和 pageSize 查询参数进行调用,这导致显示每条记录,直到页面大小由用户更改。 2) 查询字符串缺少 $inlinecount=allpages 参数,因此我的控制器不会告诉网格还有更多条目,并且只向用户显示 1 页。我已经确认手动将 $inlinecount=allpages 添加到查询字符串会返回计数。
  • 我更新了代码示例以解决这两个问题。

标签: odata infragistics ignite-ui iggrid


【解决方案1】:

默认情况下,Grid MVC Helper Wrapper 将 pageSizeUrlKeypageIndexUrlKey 显式设置为自定义查询参数:pageSizepage。要让它发送 OData 参数,您应该在 JavaScript 中将 pageSizeUrlKeypageIndexUrlKey 设置为 null。将以下代码放在页面底部:

    $(function () {
        $("#grid1").on("iggriddatabinding", function (evt, ui) {
            var features = ui.owner.options.features, i;
            for (var i = 0; i < features.length; i++) {
                if (features[i].name === "Paging") {
                    features[i].pageSizeUrlKey = null;
                    features[i].pageIndexUrlKey = null;
                }
            }
        });
    });

您应该将此代码放在 Grid MVC 配置之前,因为该事件是在创建网格期间触发的,您应该在创建网格之前绑定到它。

【讨论】:

  • 再次感谢您的回复。更新后的代码允许网格在第一页加载时正确呈现,但是这不会将 $inlinecount=allpages 添加到查询字符串中,因此网格仅显示结果的第一页并且不提供更多结果。据我所知,这是唯一剩下的问题。
猜你喜欢
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 2020-12-01
  • 1970-01-01
  • 2014-08-21
相关资源
最近更新 更多