Я пытаюсь установить индекс страницы для сетки кендо на контроллере, чтобы избежать пейджинга на стороне клиента. При использовании пейджинга на стороне клиента не отображаются записи, кроме первой страницы. При вызове данных с контроллера я возвращаю только 10 записей, необходимых для этой страницы. Вызов данных включает функции Skip() и Take(), которые возвращают только сервер, а не загружают всю сетку.Установить индекс страницы сетки Kendo UI в контроллере MVC
.cshtml
@(Html.Kendo().Grid<Reckon.Service.Payroll.Data.DTO.EmployeeDto>()
.Name("EmployeeGrid")
.Columns(cols =>
{
cols.Bound(emp => emp.Id).Title("ID").Hidden();
cols.Bound(emp => emp.EmployeeNumber).Title("Employee ID").Width(100);
cols.Bound(emp => emp.IsPayRunReady).Title("Status").Width(10).ClientTemplate("<span title='This employee is #= IsPayRunReady ? '': 'not '#payrun ready.' class='#= IsPayRunReady ? 'okICN-small' : 'alertICN-small'#'>#= IsPayRunReady ? '': 'Not' # #= IsPayRunReady ? 'P':'p'#ayrun ready</span>");
cols.Bound(emp => emp.FirstName).Title("First Name").Width(100);
cols.Bound(emp => emp.LastName).Title("Last Name").Width(100);
cols.Bound(emp => emp.DateOfBirth).Title("DOB").Format("{0:dd/MM/yyyy}").Width(100);
cols.Template(@<text></text>).ClientTemplate("<a href='" + Url.Action("EmployeeDetailEdit", "EmployeeDetail") + "/#=Id#'>Edit</a>").Width(50);
cols.Template(@<text></text>).ClientTemplate("<a href='" + Url.Action("EmployeeDetailRead", "EmployeeDetailRead") + "/#=Id#'>View</a>").Width(50);
cols.Template(@<text></text>).ClientTemplate("<a class='k-button xxx' tag='#=Id#'>Delete</a>").Width(50);
})
.Pageable(pageable => pageable.ButtonCount(5))
.Sortable(sortable => sortable.AllowUnsort(false))
.Filterable()
.Resizable(resize => resize.Columns(true))
.Reorderable(reorder => reorder.Columns(true))
.Navigatable()
.Events(evt => evt.DataBound("afterGridLoaded"))
.DataSource(dataSource => dataSource
.Ajax()
.Batch(true)
.PageSize(10)
.ServerOperation(false)
.Model(model =>
{
model.Id(emp => emp.Id);
})
.Read(read => read.Action("EmployeeListPerPage", "EmployeeDetail"))
)
)
.cs
public ActionResult EmployeeListPerPage([DataSourceRequest] DataSourceRequest request)
{
Dispose();
EmployeeListRequest empList = new EmployeeListRequest();
empList.PageNum = request.Page;
empList.PageSize = request.PageSize;
//empList.OrderBy = null; //request.Sorts.Any() ? "EmployeeNumber" : request.Sorts[0].Member;
var dataSource = _payrollService.GetEmployeeListPerPage(empList);
var model = new EmployeeListModel(dataSource);
DataSourceResult result = model.Employees.ToDataSourceResult(request);
result.Total = dataSource.Total;
// Set the Page index here
return Json(result, JsonRequestBehavior.AllowGet);
}
При использовании на стороне клиента поискового вызова, он устанавливает возвращаемые данные на первой странице, а затем выполняет пейджинг стороне клиента возвращающегося нет результатов.
Возможно ли это? Любая помощь будет принята с благодарностью.
По какой причине вы не хотите использовать подкачку Kendo? –
Пейджинг кендо - это клиентская сторона, и когда данные возвращаются с серверной стороны, он возвращает только 10 записей, которые были необходимы для текущей страницы. Записи привязаны к сетке в качестве первых 10 записей, и когда вы нажимаете на любую другую страницу, кроме первой страницы, она не отображает никаких других записей. Именно по этой причине я не хочу использовать пейджинг кендо, поскольку я не возвращаю все данные в сетку и только данные, необходимые для текущей выбранной страницы. –
Я не понимаю, почему вы пытаетесь это сделать: 'empList.PageNum = request.Page;' Там вы делаете много лишней работы, в основном сражаясь с тем, что Kendo делает для вас автоматически. Если вы заходите на страницу (через querystring), она вернет вам правильную страницу. –