Jquery 网格仅适用于要加载的 8400 行。

Posted

技术标签:

【中文标题】Jquery 网格仅适用于要加载的 8400 行。【英文标题】:Jquery grid working only for 8400 rows to load. 【发布时间】:2016-08-12 15:28:28 【问题描述】:

不确定我的 jquery 网格仅加载 8400 条记录出了什么问题。 最初我虽然表中可能存在一些与数据相关的问题。但是我尝试删除每一列并尝试加载整个(大约 15k)它不加载它只显示空网格..

   jQuery("#list47").jqGrid(
            url: '/vunerability/GetResult/',
            //data: mydata,
            datatype: 'JSON',
            height: 250,
            width: 1150,
            rowNum: 1000,
            rowTotal: 20000,
            jsonReader: 
                root: "rows",
                page: "page",
                total: "total",
                records: "records",
                repeatitems: true,
                id: "0",
            ,

            colNames: ['Vunlerability_Id','Vunlerability_Title','Security_Level','IPAddress','Operating_System','Environment', 'Location', 'Status'],
            colModel: [
                 name: 'Vunlerability_Id', width: 80, sorttype: "int" ,
                 name: 'Vunlerability_Title',  width: 100, sorttype: "int" ,
                 name: 'Security_Level', width: 90 ,
                 name: 'IPAddress', width: 50 ,
                 name: 'Operating_System', width: 100, sorttype: "int" ,
                 name: 'Environment',  width: 60 ,
                 name: 'Location',  width: 50 ,
                 name: 'Status',  width: 30 
            ],
            pager: "#plist47",
            rowList: [1000, 2000, 3000],
            mtype: "Get",
            repeatitems: true,
            loadonce: true,
            rownumbers: true,
            autoencode: true,
            gridview: true,
            caption: "Open Results"

        );

        jQuery("#list47").jqGrid('navGrid', '#plist47',  del: false, add: false, edit: false , , , ,  multipleSearch: true );

    );

我的 json 操作结果

  public JsonResult GetResult()
        

            var result = _db.tblVulnerabilities.Where(x => x.Status == "Open").ToList().Take(8500);
            var VunList = result
                      .Select(c => new VunerabilityViewModel.vulnerabilitylistOpenVsClose()
                      
                          Vunlerability_Id = c.Vulnerability_Id,
                          Vunlerability_Title = c.Vulnerability_Title,
                          Security_Level = c.Security_Level,
                          IPAddress = c.AssetIP_Address,
                          Operating_System = c.Operating_System,
                          Environment = c.Environment,
                          Location = c.Location,
                          Status = c.Status
                      );
            //string json = JsonConvert.SerializeObject(VunList);
            return Json(VunList, JsonRequestBehavior.AllowGet);
        

谁能帮我看看我做错了什么?

提前致谢。

【问题讨论】:

不要加载那么多行,因为它总是会很慢(更不用说给您的服务器带来不必要的压力)。使用分页和/或过滤。 尝试做 rowNum: '' 【参考方案1】:

在我看来,这个问题纯粹是服务器端问题,因为使用旧的 ASP.NET MVC 和旧的javascriptSerializer 进行 JSON 序列化是因为使用了非常旧版本的 Newtonsoft.Json。该解决方案将取决于您使用的 ASP.NET MVC 和 JSON 序列化程序。

例如,您可以尝试将return Json(VunList, JsonRequestBehavior.AllowGet); 行替换为以下内容

return new JsonResult 
    Data = VunList,
    JsonRequestBehavior = JsonRequestBehavior.AllowGet,
    MaxJsonLength = Int32.MaxValue
);

另一个提示是在 Visual Studio 中打开 NuGet 控制台并执行 Update-Package Newtonsoft.Json 以更新到最新版本的 Newtonsoft.Json

有一些解决方案可以通过在web.config 中添加部分来增加 JSON 大小的限制。你可以搜索jsonSerializationmaxJsonLength

另外,我建议您将rowNum: 1000 更改为rowNum: 20rowNum: 25。通过填充用户无需滚动即可看到的页面部分来缓慢地多次制作网页是没有意义的。最多可显示 20-25 行。在使用loadonce: true 的情况下,您将拥有非常快速负责的页面和本地 分页。

我建议您另外将height: 250 替换为height: "auto",如果您通过rowNum 管理网格的高度,这将非常有用。那你应该把jsonReader换成jsonReader: id: "Vunlerability_Id"

我建议您使用 jqGrig 的最新 4.13.2 版本的 free jqGrid 分支 - 我开发的分支。它有许多新功能,例如 Font Awesome 图标的使用(参见 here)、forceClientSorting: true 的使用(参见 the answer 的更新部分)、navGrid 的选项 reloadGridOptions: fromServer: true (参见 here)以及每个已发布版本的自述文件和the wiki 中描述的许多其他功能。

【讨论】:

以上是关于Jquery 网格仅适用于要加载的 8400 行。的主要内容,如果未能解决你的问题,请参考以下文章

Datatable jquery服务器端仅适用于加载页面

jQuery 仅适用于 DataTable 的第一页

jqGrid 工具栏搜索仅适用于前 20 行。分页为 20,40,60

jQuery:后代选择器仅适用于一个“隐藏”的 div

Tkinter网格不能放在屏幕死点的任何地方

Vaadin网格渴望加载