在ajax get之后,Kendo网格总数没有绑定

时间:2016-05-12 14:39:35

标签: jquery ajax kendo-grid kendo-asp.net-mvc kendo-datasource

我正在使用最初加载这些数据的kendo网格。

 @(Html.Kendo().Grid<GridModel>()
              .Name("Grid")
              .Columns(columns =>
              {
                  columns.Bound(p => p.ID).Hidden(true);
                  columns.Bound(p => p.Name);
                  columns.Bound(p => p.Village);
                  columns.Command(command =>
                  {
                      command.Custom("ButtonP");
                      command.Custom("ButtonEdit");
                      command.Custom("ButtonActive");
                      command.Custom("ButtonPause");
                  }).Width("20%").HtmlAttributes(new { @class = "Custom" });
              })
              .Reorderable(reordering => reordering.Columns(true))
              .HtmlAttributes(new { style = "margin-bottom: 20px;" })
              .Sortable()
              .EnableCustomBinding(true)
              .ColumnMenu()
        .AutoBind(false)
              .Pageable(pageable => pageable
                  .Refresh(true)
                  .PageSizes(true)
                  .ButtonCount(5))
              .DataSource(dataSource => dataSource
                  .Ajax()
                  .Read(read => read.Action("GetData", "Home"))
                 // .PageSize(30)
                  .ServerOperation(true)
             )
              .Events(e => e.DataBound("ModifyButtons"))
              )

在此之后有一个搜索按钮,它通过ajax调用来调用后端来获取记录和总数。如果我包含所有记录,那么它用于寻呼,但是当我进行服务器分页时,它不会获取计数或总记录。 工作ajax

var dataSource = new kendo.data.DataSource({
                    data: response
                });
$("#Grid").data("kendoGrid").setDataSource(dataSource);

和后端

var searchItems = Service.Search(SearchModel).Select(GridModel);
                return Json(searchItems, JsonRequestBehavior.AllowGet);

但我想做服务器分页,当我返回此(非工作Ajax)时

var dataSource = new kendo.data.DataSource({
                    data: response.Data,
                    total: response.Total
                });
$("#Grid").data("kendoGrid").setDataSource(dataSource);

和后端

var searchItems = Service.Search(SearchModel).Select(GridModel);
                 var records = new 
                {
                    Data = searchItems,
                    Total = 90
                };
                return Json(records, JsonRequestBehavior.AllowGet);

==要测试的硬编码总数。 SearchModel包含复杂搜索的参数

请告诉我如何从服务器端查找总数,它只显示当前页面大小为总计数。

1 个答案:

答案 0 :(得分:1)

如果您正在使用包装,那么这可能是一个更容易的解决方案。

如果您正在进行服务器端操作,那么将控制器签名更改为注意:我假设它未设置如下

public JsonResult GetData([DataSourceRequest] DataSourceRequest request, SearchModel mySearchObject){
 //stuff happens here. 
 //get some results.
var model = someresults; 
//more stuff happens here....

return Json(model.ToDataSourceResult(request),JsonRequestBehavior.AllowGet);


}

确保您添加了以下用法,以便工作:

using Kendo.Mvc.Extensions;
using Kendo.Mvc.UI;

这将为您返回一个新的datasource对象,因此网格应该正确绑定并为您提供您所追求的总数据等。

没有看到你正在做的更多事情这是假设许多事情,但是应该希望在第一眼看到代码中缺少的部分。