2015-03-27 3 views
0

У меня есть сетка Kendo MVC, где разбиение на страницы не работает. Он загружает набор результатов на одной странице, и нажатие на кнопки страницы ничего не делает.Pagination не работает

Файлы сценариев загружены правильно и в правильном порядке (jquery-1.11.2.min.js, kendo.all.min.js и kendo.aspnetmvc.min.js).

Я использую Kendo UI версии 2015 Q1 (2015.1.318.545).

Посмотреть

@(Html.Kendo().Grid<MyModel>() 
    .Name("Grid") 
    .Columns(columns => 
    { 
     columns.Bound(c => c.Type); 
     columns.Bound(c => c.Count); 
     columns.Bound(c => c.Date); 
    }) 
    .Filterable() 
    .Pageable(pageable => pageable 
     .Refresh(true) 
     .PageSizes(true) 
     .ButtonCount(10) 
     .PageSizes(new[] { 20, 50, 100 })) 
    .DataSource(ds => ds 
     .Ajax() 
     .Read(r => r.Action("GetGridData", "Home", new { code = "code" })) 
     .PageSize(20) 
    ) 
) 

Контроллер

public ActionResult GetGridData([DataSourceRequest]DataSourceRequest request, string code = "") 
{ 
    var result = MyService.GetGridData(code); 
    return Json(result.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); 
} 

Сервис

public IQueryable<MyModel> GetGridData(string code) 
{ 
    using (var dbContext = new MyEntities()) 
    { 
     return dbContext.Products.Where(w => w.Code == code) 
           .Select(s => new MyModel { 
            Type = s.Type, 
            Count = s.Count, 
            Date = s.Date 
           }); 
    } 
} 

При загрузке страницы, то DataSourceRequest выглядит следующим образом:

Kendo DataSourceRequest

Без надлежащего размера страницы результат будет полный набор данных, как показано здесь:

Kendo DataSourceResult

+0

Откуда вы получаете 'regionCode' ?? Я не нахожу в вашей переменной такую ​​переменную. – Dhwani

+0

У вас достаточно данных в базе данных? вы можете показать код метода 'MyService.GetGridData (code)'? – Dhwani

+0

Я добавил службу, так как вы можете видеть, что это простой запрос к Entity Framework, возвращающий IQueryable. Я полагаюсь на метод 'ToDataSourceResult (запрос)' для выполнения запроса, поэтому он получит только то, что ему нужно из базы данных. Конечно, это работает только в том случае, если «DataSourceRequest» правильно передано в действие. – Nicholas

ответ

0

Я в конечном итоге фиксируя его путем добавления к .Type(HttpVerbs.Get) читать метод. Я понятия не имею, почему это исправляет проблему, потому что она уже выполняет Get. С .Type(HttpVerbs.Get) он правильно добавляет параметры DataSourceRequest к URL.

@(Html.Kendo().Grid<MyModel>() 
    .Name("Grid") 
    .Columns(columns => 
    { 
     columns.Bound(c => c.Type); 
     columns.Bound(c => c.Count); 
     columns.Bound(c => c.Date); 
    }) 
    .Filterable() 
    .Pageable(pageable => pageable 
     .Refresh(true) 
     .PageSizes(true) 
     .ButtonCount(10) 
     .PageSizes(new[] { 20, 50, 100 })) 
    .DataSource(ds => ds 
     .Ajax() 
     .Read(r => r.Action("GetGridData", "Home", new { code = "code" }).Type(HttpVerbs.Get)) 
     .PageSize(20) 
    ) 
) 
1

Эй, я попробовал ваш код и он прекрасно работает на моем машина. Я мог видеть PazeSize = 20 в методе GetGridData.

Единственное изменение, которое я должен был сделать, чтобы запустить ваш код изменения ниже линии:

.Read(r => r.Action("GetGridData", "Home", new { code = 'code' })) 

к:

.Read(r => r.Action("GetGridData", "Home", new { code = "code" })) 

Я же сомнения, что будет причиной вашей проблемы, как и с выше вы получите сообщение об ошибке «Плохая константа времени компиляции», которую вы не получаете.

Я подозреваю, что причиной может быть несоответствие в jquery и файле сценария kendo java.

Предлагаю вам взять этот код в примере приложения mvc и попробовать там, используя предложенные js версии Kendo. Например, если вы используете Кендо 2014 Q3 затем:

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
    <script src="http://cdn.kendostatic.com/2014.3.1411/js/kendo.all.min.js"></script> 
    <script src="http://cdn.kendostatic.com/2014.3.1411/js/kendo.aspnetmvc.min.js"></script> 

Только в том случае, если это поможет полный режим просмотра кода Test.cshtml:

@using Kendo.Mvc.UI 
@using MvcApplication16.Controllers 
@model MvcApplication16.Controllers.MyModel 

@{ 
    ViewBag.Title = "Test"; 
    Layout = null; 
} 

    <link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1411/styles/kendo.common.min.css"> 
    <link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1411/styles/kendo.rtl.min.css"> 
    <link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1411/styles/kendo.default.min.css"> 
    <link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1411/styles/kendo.dataviz.min.css"> 
    <link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1411/styles/kendo.dataviz.default.min.css"> 
    <link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1411/styles/kendo.mobile.all.min.css"> 

    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
    <script src="http://cdn.kendostatic.com/2014.3.1411/js/kendo.all.min.js"></script> 
    <script src="http://cdn.kendostatic.com/2014.3.1411/js/kendo.aspnetmvc.min.js"></script> 

@(Html.Kendo().Grid<MyModel>() 
     .Name("Grid") 
     .Columns(columns => 
     { 
      columns.Bound(c => c.Type); 
      columns.Bound(c => c.Count); 
      columns.Bound(c => c.Date); 
     }) 
     .Filterable() 
     .Pageable(pageable => pageable 
      .Refresh(true) 
      .PageSizes(true) 
      .ButtonCount(10) 
      .PageSizes(new[] { 20, 50, 100 })) 
     .DataSource(ds => ds 
      .Ajax() 
      .Read(r => r.Action("GetGridData", "Home", new { code = "code" })) 
      .PageSize(20) 
    )) 
+0

Извините, это «код» в моем исходном коде. Не уверен, как это стало «кодом» здесь. – Nicholas

+0

Проверка скриптов была хорошим предложением, я только что проверил, и они загружаются правильно. Сначала 'jquery.js',' kendo.all.min.js', а затем 'kendo.aspnetmvc.min.js'. – Nicholas

+0

@Vash - Kendo нуждается в конкретной версии jquery для загрузки в первую очередь. На всякий случай это помогает. BTW любая ошибка в консоли браузера? – SBirthare