动态滚动Telerik MVC网格

时间:2016-03-31 19:04:46

标签: c# jquery asp.net asp.net-mvc telerik

我试图从一些Telerik MVC网格中取出分页,这些网格中装载了大量数据(超过5000,一旦投入生产,可能会更多)。使用我们较小的网格,我只需要取消Pageable属性(参见下面的代码),滚动功能就可以了。

对于较大的网格,我收到一个JSON错误,指出字符串的长度超过了maxJsonLength属性上设置的值。我根据此links建议更新了webconfig以设置为最大值,但它仍然给了我相同的错误。

我使用的Telerik版本是普通的Telerik(不是Kendo),是MVC版本(主UI DLL是Telerik.Web.MVC,版本2012.2.801.340)。

我找到的所有文档都指向新版本的Kendo或RadGrid,我的版本中未包含/支持。

有没有办法实现这一点,或者通过像here那样一次性加载它,或者使用我拥有的Telerik版本创建动态加载网格,还是我运气不好?我也愿意接受另一种方法来实现这一目标,但结果必须在某种网格中。

以下是我对所有网格的基本代码。我遇到问题的较大网格的列数多于此列,这有助于解决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")))

提前致谢

1 个答案:

答案 0 :(得分: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");

编辑:

如果问题是数据太多而您不想分页,那么通过添加以下内容来尝试虚拟化如何:

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

您仍需要一个页面大小,例如:http://demos.telerik.com/aspnet-mvc/grid/virtualization-remote-data