如何在kendo网格中加载大量数据

网页方法:

 Public Shared Function Pcpacking() As IEnumerable(Of Packing) Dim db As New STOREEntities Return db.PC_PACKING_HISTORIES. _ Where(Function(q) q.PACK_DATE > "1388/11/07"). _ Select(Function(q) New Packing _ With {.Packdate = q.PACK_DATE, .Packserialnumber = q.PACK_SERIAL_NUMBER, .Netweight = q.NET_WEIGHT, .Packusername = q.PACK_USER_NAME}).ToList() End Function 

脚本:

 $(function () { $("#grid").kendoGrid({ height: 200, columns: [ { field: "Packserialnumber", width: "150px" }, { field: "Netweight", width: "50px" }, { field: "Packusername", width: "150px" }, { field: "Packdate", width: "100px" } ], editable: false, dataSource: { schema: { data: "d", model: { id: "Packserialnumber", fields: { Packserialnumber: { editable: false, nullable: true }, Netweight: { type: "number", validation: { required: true, min: 1} }, Packusername: { validation: { required: true} }, Packdate: { validation: { required: true} } } } }, batch: false, transport: { read: { url: "Default.aspx/Pcpacking", contentType: "application/json; charset=utf-8", type: "POST" } } } }); }); 

有这个条件(PACK_DATE>“1388/11/07” 366记录 )一切正常。但是当我将日期更改为1388/11/06 1260记录或1388/11/05 5460记录或…发生以下错误:

{“Message”:“使用JSON JavaScriptSerializer进行序列化或反序列化时出错。字符串的长度超过maxJsonLength属性上设置的值。”,“StackTrace”:“在System.Web.Script.Serialization.JavaScriptSerializer。Serialize( System.Web.Script.Script.Script.Services.RestHandler.InvokeMethod(HttpContext)中System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj,SerializationFormat serializationFormat)\ r \ n的Object obj,StringBuilder输出,SerializationFormat serializationFormat)\ r \ n context,WebServiceMethodData methodData,IDictionary`2 rawParams)\ r \ n
在System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context,WebServiceMethodData methodData)“,”ExceptionType“:”System.InvalidOperationException“}

我认为kendo grid不支持巨大的数据。任何建议?
对不起,我的英语不好。

问题实际上是,默认情况下,如果生成的JSON字符串大于100 kB,.NET JSON序列化程序会抛出exception。 显然,发送数千条记录的数量超过了限制。 您可以更改此设置 ,但我不建议您将其用于您的应用程序。

而是将网格配置为一次请求小块数据。 看起来您可以配置Kendo Grid以在滚动时加载更多数据 。

 $("#grid").kendoGrid({ dataSource: { type: "odata", serverPaging: true, serverSorting: true, pageSize: 100, transport: { read: { url: "Default.aspx/Pcpacking", contentType: "application/json; charset=utf-8", type: "POST" } } }, scrollable: { virtual: true }, ... }); 

您的服务器端脚本必须处理Kendo发送的top (要发送的记录数)和skip (从哪里开始)参数。

 $(function () { $("#grid").kendoGrid({ height: 200, columns: [ { field: "Packserialnumber", width: "150px" }, { field: "Netweight", width: "50px" }, { field: "Packusername", width: "150px" }, { field: "Packdate", width: "100px" } ], editable: false, dataSource: { schema: { data: "d", model: { id: "Packserialnumber", fields: { Packserialnumber: { editable: false, nullable: true }, Netweight: { type: "number", validation: { required: true, min: 1} }, Packusername: { validation: { required: true} }, Packdate: { validation: { required: true} } } } }, batch: false, transport: { read: { url: "Default.aspx/Pcpacking", contentType: "application/json; charset=utf-8", dataType: "json" } } } }); });