我正在尝试使用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"))
)
)
由于
答案 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将被考虑在内。