Kendo UI - 网格分页(服务器端)

时间:2013-03-18 13:39:30

标签: kendo-ui kendo-grid

我正在尝试使用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 个答案:

答案 0 :(得分:14)

As explained in the documentation启用 serverPaging 时,您需要在架构中指定总计,并且每次从服务器返回响应时,您还需要返回该总计。架构。

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

同样讨论here

检查以下example

答案 1 :(得分:8)

是的,您需要在回复中传递总计字段。

您的观点可能如下:

@(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中查看请求和响应,您将看到魔术是如何发生的: 请求:sort = SessionId-asc&amp; page = 7&amp; pageSize = 20&amp; group =&amp; filter =

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

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

答案 2 :(得分:0)

根据最初的例子,&#34; Total&#34;将自动识别,如果您想在每页显示100个结果,请将其设置为&#34; PageSize&#34;代替。

答案 3 :(得分:0)

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

.EnableCustomBinding(true)

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