JQGrid 在使用 MVC 4 处理超过 3200 条记录时显示为空

JQGrid Showing empty while processing more than 3200 records with MVC 4

JQGrid 对于最多 3000 条记录工作正常,loadone:true 也是如此,当超过 3200 条时,它显示空网格。我想处理服务器端分页和 loadonce:false。有没有更好的方法来加载数据 loadonce:true 并显示一些像 20k 记录这样的大量数据?如果我们打算使用服务器端分页,我们应该只从数据库中获取特定数量的记录?请在下面找到我的代码,如果有任何问题请指出我。

型号:

public class GOALogging
{
    public int SERV_TRANS_ID { get; set; }
    public string ACT_YEAR  { get; set; }
    public string SEAS { get; set; }
    public string RESPONSE_DT { get; set; }
}

控制器

  public ActionResult Index()
  {
      return View();
  }

 public JsonResult getRecords()
  {
      List<GOALogging> items = new List<GOALogging>();
      items = GetLoggingDetails();
      var a = Json(items, JsonRequestBehavior.AllowGet);
      return a;
  }

public List<GOALogging> GetLoggingDetails()
    {
        string connString = ConfigurationManager.ConnectionStrings["ACTOLConnection"].ConnectionString;
        SqlConnection conn = new SqlConnection(connString);
        SqlCommand cmd = new SqlCommand();
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandTimeout = 6000;
        cmd.CommandText = "GET_SAMPLEDETAILS";
        cmd.Connection = conn;
        conn.Open();
        DataTable dataTable = new DataTable();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dataTable);
        conn.Close();
        da.Dispose();

        List<GOALogging> items = new List<GOALogging>();
        foreach (DataRow row in dataTable.Rows)
        {
            items.Add(new GOALogging
            {
                SERV_TRANS_ID = Convert.ToInt32(row["SERV_TRANS_ID"]),
                ACT_YEAR = row["ACT_YEAR"].ToString(),
                SEAS = row["SEAS"].ToString(),
                RESPONSE_DT = row["RESPONSE_DT"].ToString()
            });
        }
        return items;
    }

查看

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="~/Scripts/grid.locale-en.js"></script>
<script src="~/Scripts/jquery-1.11.0.min.js"></script>
<link href="~/Scripts/lib-UI-jquery-css-custom-theme-jquery-ui-1.9.2.custom.css" rel="stylesheet" />
<script src="~/Scripts/jquery.jqGrid.js"></script>
<script src="~/Scripts/grid.locale-en.js"></script>
<link href="~/Scripts/ui.jqgrid.css" rel="stylesheet" />
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/themes/base/jquery-ui.css" rel="stylesheet" />
</head>
<body>
<script type="text/javascript">
    $(function () {
        $("#myGrid").jqGrid({
            url: '/GOA/getRecords',
            datatype: 'json',
            myType: 'GET',
            colNames: ['ID',
                'YEAR', 'SEASON', 'RESPONSE_DT'],
            colModel: [
            { name: 'SERV_TRANS_ID' },
            { name: 'ACT_YEAR' },
            { name: 'SEAS' },
            { name: 'RESPONSE_DT' }
            ],
            pager: $('#myPager'),
            jsonReader: { cell: ""},
            rowNum: 10,
            sortname: 'SERV_TRANS_ID',
            sortorder: 'desc',
            gridview: true,
            loadonce: true,
            rowList: [10, 20, 50, 100],
            width:1120,
            height:280,
            viewrecords: true,
            caption: 'Past 24 hours ACTService Processing Status'
        });
    });
</script>
<div >
    <table id="myGrid" ></table>

    <div id="myPager"></div>
</div>
</body>
</html>

我怀疑您对序列化数据的大小有问题。我的意思是你有纯粹的 ASP.NET MVC 问题。 ASP.NET MVC 的旧版本使用非常旧的 JavaScriptSerializer 进行序列化,其具有描述的限制 here and here

我建议您使用 Newtonsoft.Json 而不是 JavaScriptSerializer。如果您要迁移到 MVC5,那么它将自动迁移。 Newtonsoft.Json 的工作速度比 JavaScriptSerializer 快得多,并且没有此类限制。

Here 您可以下载使用简单 ASP.NET MVC 编辑数据的演示项目。它使用 Newtonsoft.Json of cause.

另外建议对返回的 JSON 数据进行压缩。例如看here

这是因为 .Net 中的最大长度限制,您可以在控制器中使用以下格式化代码来提前解决问题。

        List<MEmployee> items = new List<MEmployee>();
        items = getData();
        var a = Json(items, JsonRequestBehavior.AllowGet);
        a.MaxJsonLength = int.MaxValue;
        return a;

Reference link