Asp.net core 使用KendoUI实现服务器端分页的正确方法是什么?

Asp.net core 使用KendoUI实现服务器端分页的正确方法是什么?,asp.net-core,kendo-ui,grid,kendo-grid,Asp.net Core,Kendo Ui,Grid,Kendo Grid,类似的问题。我有3000件物品可以放回格子里。过滤可以将其降至零。我希望能够将3000个项目分页到网格中,并且只返回每个页面上出现的(比如说50个)项目(对于任何给定的过滤器) @(Html.Kendo().Grid()) .名称(“网格”) .工具栏(工具=> { tools.Create(); }) .HtmlAttributes(新的{@class=“k-widget k-grid”}) .可选() .列(列=> { columns.Bound(c=>c.EMSFundId).Hidde

类似的问题。我有3000件物品可以放回格子里。过滤可以将其降至零。我希望能够将3000个项目分页到网格中,并且只返回每个页面上出现的(比如说50个)项目(对于任何给定的过滤器)


@(Html.Kendo().Grid())
.名称(“网格”)
.工具栏(工具=>
{
tools.Create();
})
.HtmlAttributes(新的{@class=“k-widget k-grid”})
.可选()
.列(列=>
{
columns.Bound(c=>c.EMSFundId).Hidden(true);
columns.Bound(c=>c.FundId).Hidden(true);
columns.Bound(c=>c.ManagerId).Hidden(true);
columns.Bound(c=>c.Status).Hidden(true);
columns.Bound(c=>c.ManagerId).Hidden(true);
columns.Bound(c=>c.ManagerName).Sortable(true).Title(“实体”).Filterable(false);
columns.Bound(c=>c.FundName).Sortable(true);
columns.Bound(c=>c.AssetClass).Sortable(true);
columns.Bound(c=>c.Strategy).Sortable(true);
columns.Bound(c=>c.SubStrategy).Sortable(true);
columns.Bound(c=>c.OwnerFullName).Sortable(true);
columns.Bound(c=>c.StatusDescription).Sortable(true).Filterable(f=>f.Cell(c=>c.Operator(“startswith”).SuggestionOperator(FilterType.startswith));
})
.可调整大小(r=>r.Columns(true))
.Scrollable()
.Sortable(Sortable=>Sortable
.AllowUnsort(假)
.SortMode(GridSortMode.SingleColumn))
.Pageable(Pageable=>Pageable
.刷新(真)
.PageSizes(新的int[]{50100500})
.按钮计数(10))
.DataSource(DataSource=>
数据源
.WebApi()
.页面大小(50)
.Model(Model=>
{
model.Id(p=>p.FundId);
})
.Events(Events=>Events.Error(“错误处理程序”))
.Read(Read=>Read.Action(“GetInvestmentsAsync”、“视图”))
)
)

我已经设置了Web API来将页面和页面大小传输到服务。我可以有效地查询数据模型,只返回剑道网格要求的页面(例如第3页的50行)。这就是我被卡住的地方:剑道网格只显示了一页50个元素。如何告诉网格总共有3000个项目和10个可能的页面?

您的方法应该是这样的。请注意,这不是一个经过测试的代码,但足以让您了解哪里可能出错

public ActionResult GetInvestmentsAsync([DataSourceRequest] DataSourceRequest request)
{
  DataSourceRequest fakeRequest = new DataSourceRequest()
          {
              Groups = request.Groups,
              Filters = request.Filters,
              Sorts = request.Sorts
          };

    var investments = // fetch your data here, use a viewmodel to hold data and Total records
    DataSourceResult result;
          try
          {
              result = investments.ToDataSourceResult(fakeRequest);
          }
          catch
          {
              result = dataTable.ToDataSourceResult(new DataSourceRequest());
          }

    result.Total = investments.TotalRecords; // Assign Total here
    return JsonResults(result);
}

您不能只返回
InvestmentModel
。Kendo希望数据绑定已转换的inro
Kendo.Mvc.UI.DataSourceResult
,它具有
数据、Total
属性。您可以将模型分配给
数据
,并设置
总计
,以便剑道可以自己创建页面。另外,您能在这里添加您的方法
GetInvestmentsAsync
吗?好的。我现在看到了基础设施,它看起来相当不错。看起来需要序列化DataSourceRequest和DataSourceResults,以便将其放置在请求的URI和回复的JSON中。你有关于如何序列化/反序列化这些类型的参考或示例吗?这看起来不错,而且非常接近我自己的计算结果。然而,最大的区别在于我们谈论的是通过RESTful API与服务器通信。因此,这里的控制器将发出一个httpClient.GetAsync,服务将以JSON的形式返回DataSourceResult。但是,DataSourceRequest或DataSourceResult序列化似乎不是很好。在这方面我能找到帮助吗?也许,这对你有帮助
public ActionResult GetInvestmentsAsync([DataSourceRequest] DataSourceRequest request)
{
  DataSourceRequest fakeRequest = new DataSourceRequest()
          {
              Groups = request.Groups,
              Filters = request.Filters,
              Sorts = request.Sorts
          };

    var investments = // fetch your data here, use a viewmodel to hold data and Total records
    DataSourceResult result;
          try
          {
              result = investments.ToDataSourceResult(fakeRequest);
          }
          catch
          {
              result = dataTable.ToDataSourceResult(new DataSourceRequest());
          }

    result.Total = investments.TotalRecords; // Assign Total here
    return JsonResults(result);
}