Я пытаюсь установить индекс страницы для сетки кендо на контроллере, чтобы избежать подкачки на стороне клиента. При использовании подкачки на стороне клиента не отображаются никакие записи, кроме той, что на первой странице. При вызове данных из контроллера я возвращаю только 10 записей, которые необходимы для страницы. Вызов данных включает в себя функции Skip() и Take(), чтобы возвращать только необходимые данные с сервера, а не загружать всю сетку.
.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);
}
При использовании пейджинга на стороне клиента он устанавливает возвращаемые данные на первую страницу, а затем выполняет пейджинг на стороне клиента, не возвращая результатов.
Возможно ли это сделать? Любая помощь будет принята с благодарностью.
empList.PageNum = request.Page;
Вы выполняете много дополнительной работы, по сути борясь с тем, что кендо делает за вас автоматически. Если вы посетите страницу (через строку запроса), она вернет вам нужную страницу. - person Matt Millican   schedule 23.12.2013GetEmployeeListPerPage()
возвращаетIQueryable<T>
и используете ли вы Entity Framework или nHibernate? Все еще кажется, что ты пытаешься бороться с кендо. См. шаг 7 здесь: документы .kendoui.com/getting-started/using-kendo-with/aspnet-mvc/ - person Matt Millican   schedule 23.12.2013