2016-03-31 8 views
0

Я пытаюсь снимать разбивку на страницы из пары сетки Telerik MVC, в которые загружено большое количество данных (более 5000, возможно, больше, когда они попадают в производство). С помощью наших небольших сеток я бы просто снял свойство Pageable (см. Код ниже), и функция прокрутки просто работает.Динамическая прокрутка Telerik MVC Grid

С большими сетками я получаю ошибку JSON, говорящую, что длина строки превышает значение, заданное для свойства maxJsonLength. Я обновил webconfig, чтобы установить максимальное значение в соответствии с этим предложением links, но оно все равно дало мне ту же ошибку.

Версия Telerik, которую я использую, является простой Telerik (не Kendo) и является версией MVC (основной UI DLL является Telerik.Web.MVC, версия 2012.2.801.340).

Вся документация, которую я нашел, указывает на новую версию Kendo или RadGrid, которая не включена/поддерживается в моей версии.

Есть ли способ добиться этого, либо загрузив все это сразу, как это делает here, или создание динамически загружаемой сетки с использованием версии Telerik, которой я пользуюсь, или мне не повезло? Я также открыт для предложений по другому пути для достижения этого, но результаты должны быть в какой-то Grid.

Ниже приведен базовый код для того, что у меня есть для всех сетей. Большие сетки, с которыми у меня возникают проблемы, имеют больше столбцов, чем этот, которые помогают учитывать ошибку JSON.

@(Html.Telerik().Grid<ApportionmentCode>() 
       .DataBinding(dataBinding => dataBinding.Ajax().Select("AjaxGetAppCodes", "AppCode")) 
       .Name("Grid") 
       .Columns(columns => 
       { 
        columns.Bound(o => o.Id) 
          .Title("ID") 
          .Width(50) 
          .HtmlAttributes(new { @class = "text-center" }) 
          .Hidden(); 
        columns.Bound(o => o.Code) 
          .Title("AppCode") 
          .Width(90) 
          .HtmlAttributes(new { @class = "text-center" }); 
        columns.Bound(o => o.Description) 
          .Title("Description") 
          .HtmlAttributes(new { style = "min-width: 200px;" }) 
          .ClientTemplate("<span class=\"clip tooltip\"><#= Description #></span>"); 
        columns.Command(commands => 
        { 
         commands.Custom("edit") 
           .Text("Edit") 
           .ButtonType(GridButtonType.Image) 
           .Action("Edit", "AppCode") 
           .ImageHtmlAttributes(new { @class = "t-edit", title = "Edit" }) 
           .DataRouteValues(route => route.Add(o => o.Id)); 
        }) 
        .Width(78) 
        .HtmlAttributes(new { @class = "nowrap" }) 
        .IncludeInContextMenu(false); 
       }) 
       .ToolBar(commands => commands.Custom() 
              .Text("Add") 
              .Action("Create", "AppCode", Request.GetRouteValues()) 
              .ButtonType(GridButtonType.ImageAndText) 
              .ImageHtmlAttributes(new { @class = "t-add" }) 
              .HtmlAttributes(new { @class = "addButton" })) 
       .Filterable() 
       .ClientEvents(events => 
           { 
            events.OnDataBound("onDataBound"); 
            events.OnComplete("AddGridFilter"); 
            events.OnLoad("OnGridLoad"); 
           }) 
       .ColumnContextMenu() 
       .Sortable() 
       .Pageable(paging => paging.PageSize(20).Style(GridPagerStyles.NextPreviousAndNumeric).Position(GridPagerPosition.Bottom)) //When removed, this is the line that causes the JSON error 
       .Resizable(resizing => resizing.Columns(true)) 
       .Scrollable(a => a.Height("auto"))) 

Заранее спасибо

+0

5000 много. Я замедлю сетку. – Win

+0

Но как бы вы замедляете сетку? есть ли свойство Telerik или какой-нибудь JQuery, который может это сделать или заставить шахматную нагрузку? –

+0

Добавление виртуализации прокрутки пошатнулось бы, пример здесь: http://demos.telerik.com/aspnet-mvc/grid/virtualization-remote-data – drew

ответ

0

В контроллере, я предполагаю, что у вас есть что-то вроде:

DataSourceResult result = model.ToDataSourceResult(request); 
return Json(result, JsonRequestBehavior.AllowGet); 

Если вы используете пакет Newtonsoft и изменить его к этому, это должно позволить большее количество данных через.

DataSourceResult result = model.ToDataSourceResult(request); 
var json = Newtonsoft.Json.JsonConvert.SerializeObject(result); 
return Content(json, "text/json"); 

EDIT:

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

.Scrollable(scrollable => scrollable.Virtual(true)) 

Вам еще нужен размер страницы , пример здесь: http://demos.telerik.com/aspnet-mvc/grid/virtualization-remote-data

+0

Я просто попробовал это, и я все еще получаю ту же ошибку JSON. –

+0

Это было бы именно то, что мне нужно ... кроме того, что у меня нет доступа к Kendo. Виртуализация доступна только в новой версии (кендо), а не в старой версии Telerik, которую я имею –

Смежные вопросы