Сетка KendoUI MVC не отображает данные для страниц, кроме первой страницы - PullRequest
1 голос
/ 27 июня 2019

У меня есть сетка KendoUI MVC следующим образом:

@(Html.Kendo().Grid<MonitoringVm>()
          .Name("monitoringGrid")
          .Columns(columns =>
          {
              columns.Bound(c => c.RecordDateTime).Title("Date Time").Format("{0:dd/MM/yyyy hh:mmtt}").Width(149);
              columns.Bound(c => c.SourceEndpointName).Title("Source").Width(100).Sortable(true);
              columns.Bound(c => c.DestinationEndpointName).Title("Destination").Width(100);
              columns.Bound(c => c.TagName).Title("Tag").Width(120);
              columns.Bound(c => c.ErrorDescription).Title("Description");
              columns.Bound(c => c.LogTransferErrorId).Title("Retry")
                  .ClientTemplate("<div style='text-align: center;'><button class='k-button k-primary' type='button' onclick=\"javascript: retryRequest(this);\">Retry</button></div>")
                  .HeaderTemplate("<div style='text-align: center;'>Retry</div>")
                  .Width(50);
              columns.Bound(c => c.LogTransferErrorId).Title("Delete")
                  .ClientTemplate("<div style='text-align: center;'><img src='/Content/Images/iconfinder_bin.png' onclick=\"javascript: confirmArchiveError('#:data.LogTransferErrorId#');\" class='archive-error'/></div>")
                  .HeaderTemplate("<div style='text-align: center;'>Delete</div>")
                  .Width(50);
          }
          )
          .Pageable()
          .Sortable(sortable => sortable.AllowUnsort(true))
          .ClientDetailTemplateId("template")
          .DataSource(dataSource => dataSource
              .Ajax()
              .PageSize(25)
              .ServerOperation(true)
              .Read(read => read.Action("ReadErrorRecords", "Monitoring"))
          )
          .Events(events => events.DataBound("dataBound")))

Соответствующий контроллер выглядит следующим образом:

private readonly JsonHttpClient _client;
public JsonResult ReadErrorRecords([DataSourceRequest]DataSourceRequest request)
    {
        var urlEndpoint = $"Monitor/ErrorRecords?page={request.Page}&pageSize={request.PageSize}";
        var response = _client.Get<MonitoringVmResponse>(urlEndpoint);

        DataSourceResult result = response.Results.ToDataSourceResult(request);
        result.Total = response.Count ?? 0;
        return Json(result);
    }

Когда я перемещаюсь по разным страницам, вышеупомянутый метод контроллера вызывается,В отладчике я заметил, что получаю правильные данные, и те же самые данные возвращаются с контроллера.

В пользовательском интерфейсе для последующих страниц после первой страницы данные не отображаются.Чего мне не хватает?

1 Ответ

1 голос
/ 27 июня 2019

Кажется, что вы делаете пагинацию дважды.

Допустим, вы отправили запрос на вторую страницу. Я полагаю, что ваш _client.Get<MonitoringVmResponse>(urlEndpoint) вернет записи с 26 до 50. Но позже вы звоните response.Results.ToDataSourceResult(request), что также относится к внутренним значениям .Skip(25) и .Take(25), поэтому все ваши элементы из предыдущего вызова будут пропущены, и данные не будут возвращены на ваш взгляд.

Полагаю, есть 2 возможных пути решения этой проблемы:

  1. Вместо .ToDataSourceResult(request) можно использовать другие методы расширения Kendo, такие как GroupBy, OrderBy, Where и т. Д.
  2. Можно "обмануть" метод .ToDataSourceResult(request), указав значение 1 в виде request.Page:
    var response = _client.Get<MonitoringVmResponse>(urlEndpoint);
    request.Page = 1;
    DataSourceResult result = response.Results.ToDataSourceResult(request);
...