веб-метод:
<WebMethod()>
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
script:
$(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 записей или... возникает следующая ошибка:
{ "Сообщение": "Ошибка при сериализации или десериализации с использованием JSON JavaScriptSerializer. Длина строки превышает значение установленного в свойстве maxJsonLength.", "StackTrace": "at System.Web.Script.Serialization.JavaScriptSerializer. Сериализация (Object obj, вывод StringBuilder, SerializationFormat serializationFormat)\г\п в System.Web.Script.Serialization.JavaScriptSerializer.Serialize(объект OBJ, SerializationFormat serializationFormat)\r\n в System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext контекст, Метод WebServiceMethodDataData, IDictionary`2 rawParams)\r\n
в System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext контекст, метод WebServiceMethodData methodData)", "ExceptionType": "System.InvalidOperationException" }
Я думаю, что кендо-сетка не поддерживает огромные данные. Все предложения?
извините за мой плохой английский.
Проблема заключается в том, что по умолчанию сериализатор .NET JSON генерирует исключение, если результирующая строка JSON больше 100 кБ. Очевидно, что отправка тысяч записей превышает лимит. Вы можете изменить этот параметр, но я бы не рекомендовал его для вашего приложения.
Вместо этого настройте сетку для запроса небольших фрагментов данных за раз. Похоже, вы можете настроить 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
},
...
});
Серверная сторона script должна обрабатывать параметры top
(сколько записей для отправки) и skip
(где запускать), которые отправляет Kendo.
$(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"
}
}
}
});
});