【问题标题】:JqGrid not displaying data MVCJqG​​rid不显示数据MVC
【发布时间】:2016-10-01 00:30:48
【问题描述】:

请检查我的 jqgrid,它只显示空白网格,我的 json 是根据网格的预期格式。我正在使用 jqGrid 4.4.4

<script type="text/javascript">
        $(function () {
            $("#myGrid").jqGrid({
                url: '/Home/GetData/',
                datatype: "json",
                contentType: "application/json; charset-utf-8",
                mtype: 'GET',
                colNames: ['CP', 'Val1', 'Val2', 'Val3'],
                colModel: [
                                { name: 'CP', index: 'CP', width: 150 },
                                { name: 'Val1', index: 'Val1', width: 150 },
                                { name: 'Val2', index: 'Val2', width: 150 },
                                { name: 'Val3', index: 'Val3', width: 150 }
                ],
                rowNum: 5,
                rowList: [5, 10, 15],
                pager: '#pager',
                sortname: 'CP',
                viewrecords: true,

                sortorder: "asc",

                viewrecords: true,

                caption: "JSON Example"
            });
            $("#myGrid").jqGrid('navGrid', '#pager', { edit: true, add: true, del: true });

        });

    </script>

我的控制器方法看起来像,我正在按照 jqGrid 文档格式化数据。

 [HttpGet]
        public JsonResult GetData()
        {
            List<Rate> myList = CallProcedure<Rate>("getVal").ToList();


            var jsonData = new
            {
                total = myList .Count,
                page = 1,
                records = 10,
                rows = (
                  from d in myList 
                  select new
                  {
                      id = d.CP,
                      cell = new string[] {
                      d.CP.ToString(),
                      d.Val1.ToString(),
                      d.Val2.ToString(),
                      d.Val3.ToString()
                      }
                  }).ToArray()
            };



            return Json(jsonData, JsonRequestBehavior.AllowGet);
        }

尝试在网格中设置 jsonReader 但仍然没有成功,你能指出我哪里出错了吗?提前致谢

Json 如下所示

   {
    "total": 1,
    "page": 1,
    "records": 25,
    "rows": [{
        "id": "AUSD",
        "cell": ["AUSD    ", "0.000000", "0.72315000", "0.000000"]
    }, {
        "id": "PPFF",
        "cell": ["PPFF    ", "0.000000", "1.10288000", "0.000000"]
    }, {
        "id": "XTYU",
        "cell": ["XTYU    ", "0.000000", "1.41479000", "0.000000"]
    }, {
        "id": "NUSD",
        "cell": ["NUSD    ", "-0.000020", "0.67097000", "-0.000020"]
    }, {
        "id": "USED",
        "cell": ["USED    ", "0.000000", "3.67278000", "0.000000"]
    }, {
        "id": "UAD",
        "cell": ["UAD    ", "0.000120", "1.37037000", "0.000020"]
    }]
}

新的 json 看起来像,

{
    "total": 1,
    "page": 1,
    "records": 25,
    "rows": [
        ["Val1    ", "0.000000", "0.72315000", "0.000000"],
        ["Val12    ", "0.000000", "1.10288000", "0.000000"],
        ["Val13    ", "0.000000", "1.41479000", "0.000000"],
        ["Val14    ", "-0.000020", "0.67097000", "-0.000020"],
        ["Val15    ", "0.000000", "3.67278000", "0.000000"],
        ["Val16    ", "0.000120", "1.37037000", "0.000020"],
        ["Val17    ", "0.000000", "0.99843000", "0.000000"],
        ["Val18    ", "0.000000", "24.53100000", "0.000000"],
        ["Val19    ", "0.000000", "6.76500000", "0.000000"],
        ["Val23    ", "0.000000", "7.77250000", "0.000000"]

    ]
}

网格仍然是空白的:(

更新动作方法以返回不同格式的json,

{
    "total": 25,
    "page": 1,
    "records": 10,
    "rows": [{
        "CP": "ADRR",
        "Val1": "0.000000",
        "Val2": "0.72315000",
        "Val3": "0.000000"
    }, {
        "CP": "TRRT",
        "Val1": "0.000000",
        "Val2": "1.10288000",
        "Val3": "0.000000"
    }, {
        "CP": "TRER",
        "Val1": "0.000000",
        "Val2": "1.41479000",
        "Val3": "0.000000"
    }]
}

json 中的不同之处在于它包含 " 代表 "CP"、"Val1" 名称。并且网格仍然是空白的

这里有什么问题?页面加载时断点就到了,它按预期返回json,

    public JsonResult GetData()
            {
                List<Live> dd = CallProc<Live>("getLiveData").ToList();


                var jsonData = new
                {
                    total = 1,
                    page = 1,
                    records = dd.Count,
                    rows = (
                      from d in dd
                      select new string[]
                      {
                          CP = d.CP.ToString(),
CP1 = d.CP1.ToString(),
                           CP2 = d.CP2.ToString(),
Cp3 =                           d.Cp3.ToString()
                      }).ToArray()

                };


                string json = new JavaScriptSerializer().Serialize(jsonData); //just to check what json I am getting

                return Json(jsonData, JsonRequestBehavior.AllowGet);
            }

【问题讨论】:

    标签: jquery asp.net-mvc asp.net-mvc-4 jqgrid


    【解决方案1】:

    我在评论中的建议是:

      {
    "total": 1,
    "page": 1,
    "records": 25,
    "rows": [["AUSD    ", "0.000000", "0.72315000", "0.000000"], 
             ["2", "PPFF    ", "0.000000", "1.10288000", "0.000000"],
             ["XTYU    ", "0.000000", "1.41479000", "0.000000"]
    

    ] }

    我已经遇到了关于 JSON 结果的多个网格的问题,它解决了这些问题。

    【讨论】:

    • 更新了 json 以具有您建议的格式,但网格仍然是空白的。在这里找不到问题
    • 我建议测试一个示例并在调试器中检查 JSON 结果。它可以提供帮助。
    • 但是很抱歉,我对此没有更多的想法,祝你好运:)
    【解决方案2】:

    JqGrid 不接受行中的任何 json,它需要格式为名称值对的 json,它与列模型中的名称字段匹配。

    Here JsFiddle Sample

    {
        "total": 1,
        "page": 1,
        "records": 25,
        "rows": [
            {CP: "Val1    ", Val1: "0.000000", Val2:"0.72315000", Val3: "0.000000"},
            {CP: "Val12    ",Val1: "0.000000", Val2: "1.10288000",Val3: "0.000000"},
            .....
    
        ]
    }
    

    要获取该 json,您需要按如下方式更新您的操作方法

     public JsonResult GetData()
            {
                List<Rate> myList = CallProcedure<Rate>("getVal").ToList();
    
    
                var jsonData = new
                {
                    total = myList .Count,
                    page = 1,
                    records = 10,
                    rows = (
                      from d in myList 
                      select new
                      {
                         id = d.CP,
                         CP = d.CP.ToString(),
                         Val1= d.Val1.ToString(),
                         Val2 = d.Val2.ToString(),
                         Val3=  d.Val3.ToString()
                      }).ToArray()
                };
    
    
    
                return Json(jsonData, JsonRequestBehavior.AllowGet);
            }
    

    【讨论】:

    • 感谢您的输入,相应地更新了代码,请检查我得到的更新 json 的问题,但网格仍然是空白的
    • 我看不出您的代码无法运行的原因。您是否确保网格中的 url 正确并且正确获取数据? Here 是我使用本地数据为您创建的示例,它有效。
    • 与本地数据一起工作。但是对于 Url,网格是空白的。是的,网址是正确的,它会去那里,它也返回 json,但无法弄清楚这里出了什么问题
    • 请看问题更新,添加动作方法,能指出哪里出错了吗?
    • 终于解决了!!!问题是,控制器级别有一个 AuthPrivilege 属性,这会阻止返回该 json。谢谢大家
    【解决方案3】:

    您是否在调试器中检查了服务器的结果? 控制台中是否显示任何问题?

    如果没有,可以尝试删除 jsonData 块中的“ToArray()”。

                var jsonData = new
            {
                total = myList .Count,
                page = 1,
                records = 10,
                rows = (
                  from d in myList 
                  select new
                  {
                      id = d.CP,
                      cell = new string[] {
                      d.CP.ToString(),
                      d.Val1.ToString(),
                      d.Val2.ToString(),
                      d.Val3.ToString()
                      }
                  })
            };
    

    【讨论】:

    • 感谢您的评论。控制台没有错误,删除 ToArray() 也没有帮助。
    • 它击中了控制器,json也被返回,但不知何故网格没有加载数据
    • 我更新了问题以显示我得到的 json
    • 尝试只返回 json 格式的数据。这可能是因为您的 JSON 内部的结构。移除 id 和 cell 并保留数据数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    相关资源
    最近更新 更多