Asp.net core 使用KendoUI实现服务器端分页的正确方法是什么?
类似的问题。我有3000件物品可以放回格子里。过滤可以将其降至零。我希望能够将3000个项目分页到网格中,并且只返回每个页面上出现的(比如说50个)项目(对于任何给定的过滤器)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
@(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希望数据绑定已转换的inroKendo.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);
}