10

我正在尝试将 Kendo-UI 网格与分页一起使用。Total 属性似乎一切正常,尽管我将其设置为 100,但它显示了我正在设置的页面大小的 10 个项目中的 1-10 个。有人在这方面取得了更好的成功吗?我搜索了剑道文档和论坛,但没有成功。

@(Html.Kendo().Grid(Model)
.Name("Grid")
.Columns(columns =>
{
    foreach (System.Data.DataColumn column in Model.Columns)
    {
        columns.Bound(column.ColumnName);
    }
})
.Pageable()
.Sortable()
.Scrollable()
.Filterable()
.Groupable()
.DataSource(dataSource => dataSource
    .Ajax()
    .PageSize(10)
    .Total(100)
    .Model(model =>
        {
            foreach (System.Data.DataColumn column in Model.Columns)
            {
                model.Field(column.ColumnName, column.DataType);
            }                
        })
    .Read(read => read.Action("Read", "Controls"))
)

)

谢谢

4

4 回答 4

14

如文档中所述,启用serverPaging时,您需要在架构中指定总计,并且每次从服务器返回响应时,您还需要在架构指定的这个位置返回该总计。

 dataSource: {
    serverPaging: true,
    schema: {
        data: "data",
        total: "total"
    },
  //...

这里也同样讨论。

检查以下示例

于 2013-03-19T20:16:24.680 回答
9

是的,您需要在响应中传递 Total 字段。

你的观点可能是这样的:

@(Html.Kendo().Grid<YourViewModel>()
      .Name("grid")
      .DataSource(dataSource => dataSource          
          .Ajax()
          .PageSize(20)
          .ServerOperation(true)
          .Read(read => read.Action("Data_Read", "YourController", new {Id=Model.CurrentId}))
       )
      .Columns(c =>
      {
          c.Bound(x => x.Name);
          c.Bound(x => x.CreatedTime);
      })
      .Pageable()
      .Sortable()
)

您的操作代码如下:

    public ActionResult Data_Read([DataSourceRequest]DataSourceRequest request, int Id)
        {
            int total = yourQuery.GetTotal(Id); 

            var returnViewModel = yourQuery.GetViewModels(Id, request.Page, request.PageSize);


            return Json(new
            {
                Data = returnViewModel,
                Total=total
            });
        }

在 Fiddler 中查看请求和响应,你会看到魔法是如何发生的: Request: sort=SessionId-asc&page=7&pageSize=20&group=&filter=

即网格传递给控制器​​的DataSourceRequest格式;它已经包含分页所需的参数。

查看操作的响应,您将看到一个包含所有记录的数据字段。Total 字段是 Kendo 网格分页所需的所有记录的总量。

于 2013-07-22T21:37:22.260 回答
0

根据原始示例,“Total”将被自动识别,如果您想每页显示 100 个结果,请将其设置在“PageSize”中。

于 2013-03-18T13:48:59.013 回答
0

如果您为 ASP.NET MVC 使用 Kendo 包装器,请考虑添加:

.EnableCustomBinding(true)

本文所述,自定义绑定允许绕过内置的分页/排序工具。这样,Total 将被考虑在内。

于 2013-04-09T09:10:49.180 回答