$('#table').jqGrid({
    url: 'Test/TestAction',
    mtype: 'POST', // 这里GET和POST都试过
    datatype: 'json',
    autowidth: true,
    autoheight: true,
    caption: 'Test',
    colNames: ['编号', '类型ID', '类型名称', '类型值', '备注'],
    colModel: [
        { name: 'ID', width: 75, sortable: false },
        { name: 'TypeID', width: 90, sortable: false },
        { name: 'TypeName', width: 100, sortable: false },
        { name: 'TypeValue', width: 80, align: "right", sortable: false },
        { name: 'TypeBZ', width: 200, align: "right", sortable: false }
    ]
});
后台代码(试过net自带的json序列化,用下面的Newtonsoft的Json组件,也没法显示数据)
public JsonResult TestAction()
{
    string str = Newtonsoft.Json.JsonConvert.SerializeObject
        (dictionaryService.GetAll_DM_WEBCONFIG());
            
    JsonResult jr = Json(str, JsonRequestBehavior.AllowGet);
    return jr;
}
在前台的jqgrid的loadComplete事件里面看了下,数据是确实传到前台了的格式如下:
[{"ID":1,"TypeID":1,"TypeName":"Top","TypeValue":1,"TypeBZ":"测试一"},{"ID":2,"TypeID":1,"TypeName":"Left","TypeValue":1,"TypeBZ":"测试二"},{"ID":3,"TypeID":1,"TypeName":"Right","TypeValue":1,"TypeBZ":"测试三"},{"ID":4,"TypeID":1,"TypeName":"Bottom","TypeValue":1,"TypeBZ":"测试四"},{"ID":5,"TypeID":5,"TypeName":"5","TypeValue":5,"TypeBZ":"5"},{"ID":6,"TypeID":6,"TypeName":"6","TypeValue":6,"TypeBZ":"6"},{"ID":7,"TypeID":7,"TypeName":"7","TypeValue":7,"TypeBZ":"7"},{"ID":8,"TypeID":8,"TypeName":"8","TypeValue":8,"TypeBZ":"8"},{"ID":9,"TypeID":9,"TypeName":"9","TypeValue":9,"TypeBZ":"9"},{"ID":11,"TypeID":11,"TypeName":null,"TypeValue":null,"TypeBZ":null},{"ID":12,"TypeID":12,"TypeName":null,"TypeValue":null,"TypeBZ":null}]
把上面的json定义为本地变量的话,采用local方式是可以显示数据的,但如果采用url方式,就始终显示不了。

解决方案 »

  1.   

    DEMO
      

  2.   

    看了demo,仍然找不到原因,顶一下
      

  3.   

    具体原因不好说,你用firebug or Fiddler 跟踪一下
      

  4.   

    jsonReader: {
        root: "rows",   // json中代表实际模型数据的入口  
        page: "page",   // json中代表当前页码的数据  
        total: "total", // json中代表页码总数的数据  
        records: "records", // json中代表数据行总数的数据 
        repeatitems: false
    },
    这样设置的
      

  5.   

    你返回的json 中没有相关信息,所以不好用
      

  6.   

    JS与asp.net页面结合要注意的就是编码统一的问题
      

  7.   

    本帖最后由 Sandy945 于 2011-07-28 10:00:29 编辑
      

  8.   

    为何要包含这些信息啊?
    {"records":11,"total":11,"page":1,"rows":……
    我这个只是一个测试例子 ,并没有做分页方面的数据,因为不需要带前面的信息吧?
    我把前面的加上试下
      

  9.   

    {"records":11,"total":11,"page":1,"rows
    这部分是跟JsonReader配合的吧?  
    加上后还是无效 ,问题应该不是出在这里
      

  10.   

    你现在返回的json 是什么样的?
      

  11.   

    {"records":1,"total":1,"page":1,"rows":[{"ID":1,"TypeID":1,"TypeName":"Top","TypeValue":1,"TypeBZ":"测试一"}]}测试了一条数据的格式。
      

  12.   

    看了下源代码,用的grid.base.js文件进行测试的,发现问题出在这个函数里面addJSONData = function(data,t, rcnt, more, adjust) {},对应1215行,
    下面这行调用,对应1261行
    drows = $.jgrid.getAccessor(data,dReader.root);发现如果用local的方式加载json数据,传入data是一个object,但如果读取url的json数据,传入的是字符串,getAccessor这个函数似乎在解析字符串上有问题,
    ret = obj[expr]; 对应133行
    expr为"rows"的时候,
    取不到obj中的数据求高人解答,jqgrid用的是最新版的。
      

  13.   

    按照你现在的描述,返回的是 字符串 而非 json 数据可以从服务器端进行调整 来确保返回 json 数据或者用 eval 对字符串进行处理
      

  14.   

    我终于把问题找到了,服务端把数据都放到dictionary中就可以了。
    奇怪,这方法跟网上讲的都不一样,不知道是不是新版的做过改动