В проекте веб-форм я загружаю jqGrid, используя хранимую процедуру SQL, где я возвращаю данные как json. Во время начальной настройки и тестирования я возвращал 85 строк данных. Затем я изменил параметры, которые привели к возврату 1 868 строк, за исключением того, что они не отображались в сетке.Что означает свойство maxJsonLength?
После отладки в Firebug я увидел ошибку «Длина строки превышает значение, установленное в свойстве maxJsonLength». Я исправил это, установив maxJsonLength = "2147483647" в моем webconfig как найденный в популярном сообщении Stackovrflow.
Итак, мой вопрос в том, какая строка была причиной ошибки? Это длина всей записи данных или длина данных в одном из возвращаемых столбцов?
Я видел примеры jqGrid, возвращающие гораздо больше данных. Спасибо за понимание.
Update
Я принял совет Oļegs и использовал NuGet установить Newtonsoft.Json в моем проекте. я внес изменения в свой код, чтобы использовать его:
В коде - .cs у меня есть это:
using Newtonsoft.Json;
общественный частичный класс Default2: System.Web.UI.Page {
[WebMethod]
public static string GetDataFromDB()
{
DataSet ds = new DataSet();
string con = System.Configuration.ConfigurationManager.ConnectionStrings["SQLCon"].ToString();
SqlConnection SCon = new SqlConnection(con);
SCon.Open();
SqlCommand sqlCmd = new SqlCommand("dbo.usp_GetProjectDetails", SCon);
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.Parameters.Add("@ProjNum", SqlDbType.Int).Value = DBNull.Value;
sqlCmd.Parameters.Add("@TrakIt", SqlDbType.VarChar, 255).Value = DBNull.Value;
sqlCmd.Parameters.Add("@Title", SqlDbType.VarChar, 255).Value = DBNull.Value;
sqlCmd.Parameters.Add("@Status", SqlDbType.VarChar, 255).Value = DBNull.Value;
sqlCmd.Parameters.Add("@Dept", SqlDbType.Int).Value = DBNull.Value;
sqlCmd.Parameters.Add("@AssignTo", SqlDbType.Int).Value = DBNull.Value; //19;
sqlCmd.Parameters.Add("@RecDate", SqlDbType.DateTime).Value = DBNull.Value;
sqlCmd.Parameters.Add("@CmpDate", SqlDbType.DateTime).Value = DBNull.Value;
sqlCmd.Parameters.Add("@EndDate", SqlDbType.DateTime).Value = DBNull.Value;
sqlCmd.Parameters.Add("@ExComp", SqlDbType.Int).Value = DBNull.Value;
sqlCmd.Parameters.Add("@ExAcReq", SqlDbType.Int).Value = DBNull.Value;
SqlDataAdapter da = new SqlDataAdapter(sqlCmd);
da.Fill(ds);
SCon.Close();
return JsonConvert.SerializeObject(ds.Tables[0]);
}
функция в .aspx выглядит следующим образом:
<script type="text/javascript">
$(document).ready(function() {
$.ajax({
type: "POST",
contentType: "application/json",
data: "{}",
url: "Default2.aspx/GetDataFromDB",
dataType: "json",
success: function (data) {
data = data.d;
$("#list1").jqGrid({
datatype: "local",
colNames: ["Project #", "Trak-It #", "Priority", "Title", "Status", "Department", "Assigned To", "Resource", "Requestor"],
colModel: [
{ name: 'Project Number', index: 'Project Number', width: 80, key: true, formatter: 'showlink', formatoptions: { baseLinkUrl: 'Details.aspx', target: '_new' } },
{ name: 'Trak-It #', index: 'Trak-It #', width: 80 },
{ name: 'Priority', index: 'Priority', width: 80 },
{ name: 'Title', index: 'Title', width: 200 },
{ name: 'Status', index: 'Status', width: 80 },
{ name: 'Department', index: 'Department', width: 180 },
{ name: 'Assigned To', index: 'Assigned To', width: 100 },
{ name: 'Resource', index: 'Resource', width: 160 },
{ name: 'Requestor', index: 'Requestor', width: 140 }
],
data: JSON.parse(data),
rowNum: 8,
rowList: [10, 20, 30],
pager: '#pager1',
caption: "Test Grid",
viewrecords: true,
ignoreCase: true,
async: true,
loadonce: true,
gridview: true,
width: 1000
});
}
});
});
</script>
И, наконец, в Web.config, я закомментирована maxjsonLength:
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="2147483647">
</jsonSerialization>
</webServices>
</scripting>
Но я все еще получаю ошибку = «Ошибка при сериализации или десериализации с помощью JSON JavaScriptSerializer. Длина строки превышает значение, установленное в свойстве maxJsonLength. "
Если я раскомментирую настройки web.config, он работает нормально. Если я оставлю его закомментированным и возвратит меньше данных, он отлично работает. мне не хватает?
Олег - спасибо за информацию, хотя я не уверен, что следую вашему последнему абзацу. Я использую веб-формы, чтобы воспользоваться услугами членства, и мне нужна фиксированная сетка типа заголовка, чтобы отображать результаты из хранимой процедуры - таким образом, мое использование jqGrid. В своих исследованиях я фактически загрузил ваш проект VS, но мне показалось, что мне нужно было сделать. – Brian
Кроме того, это новый проект, и я только начинаю писать код на C#. Поэтому я полагаю, что ответ заключается в том, что существует ограничение на количество возвращаемых данных json, и я могу столкнуться с проблемой с большим набором результатов. – Brian
Если вы только начинаете код на C#, тогда я бы рекомендовал вам использовать ASP.NET MVC5 и реализовать действие контроллера, которое просто возвращает ** все данные **, возвращенные из STORED PROCEDURE. Вы должны просто добавить опцию 'loadonce: true' jqGrid. Затем jqGrid будет выполнять разбиение на страницы/фильтрацию/сортировку всех данных ** локально **. MVC5 использует 'Newtonsoft.Json' по умолчанию, если вы просто возвращаете' Json (listOfItems, JsonRequestBehavior.AllowGet) 'из действия контроллера. Таким образом, вам нужно просто подготовить «Список» по результатам вызова STORED PROCEDURE. –
Oleg