我试图从一些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")))
提前致谢
答案 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