使用Jsonconvert格式化的Jqgrid本地数据不起作用

时间:2013-06-20 09:47:13

标签: c# json jqgrid mvcjqgrid

我正在尝试使用存储在隐藏字段中的数据填充jqgrid。我已成功尝试从serverdata(data type = json)填充网格的方法。但在这里我需要这样。这是我做的:

控制器:

      DataTable myTable= MyData.getAllData();

      string s = JsonConvert.SerializeObject(myTable);

       model.GridData = s;

       return this.View(model);

查看:

var mydata = $('#GridData').val();

当我在这里使用alert(mydata)时,我可以看到

  

[{“id”:1,“ToCurrencyID”:2,“货币”:“阿拉伯联合酋长国”,   “country”:“United Arab Emirates dirham”,“shortName”:“AED”,   “ExchRate”:20.000}]

这是jqgrid代码:

    jQuery(document).ready(function () {
        jQuery("#list").jqGrid({ data: mydata,
            datatype: "local",
            height: 150,
            width: 600,
            rowNum: 10,
            rowList: [10, 20, 30],
            colNames: ['Sl#', 'currencyId_Hidden', 'Country', 'Currency', 'Short Name', 'Exchange Rate'],
            //columns model/*
            colModel: [
                        { name: 'id', index: 'id', align: "left", sortable: false, width: '34px' },
                        { name: 'ToCurrencyID', index: 'ToCurrencyID', sortable: false, align: "left", hidden: true },
                        { name: 'currency', index: 'currency', align: "left", sortable: false, width: '366px' },
                        { name: 'country', index: 'country', align: "left", sortable: false, width: '366px' },
                        { name: 'shortName', index: 'shortName', width: '141px', sortable: false, align: "left" },
                        { name: 'ExchRate', index: 'ExchRate', width: '382px', sortable: false, align: "right" }
                  ],
            pager: "#pager",
            loadonce: true,
            viewrecords: true,
            caption: "Contacts"
        });

    });

问题是,网格没有填充。

但是,当我直接使用时,

  

var mydata = [{“id”:1,“ToCurrencyID”:2,“currency”:“United Arab   酋长国“,”国家“:”阿拉伯联合酋长国迪拉姆“,”短名称“:   “AED”,“ExchRate”:20.000}];

它,工作正常。

我认为jqgrid本身需要一个json数组,而不仅仅是一个字符串。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您使用的控制器代码看起来非常怀疑。您使用this.View(model)返回结果并对JsonConvert.SerializeObject进行手动JSON序列化。而不应该使用return Json(yourData, JsonRequestBehavior.AllowGet);从控制器操作返回JsonResult。应该在jqGrid中使用选项datatype: "json", url: UrlOfControllerAction而不是datatype: "local", data: mydata

如果您希望一次性返回所有数据而不实施服务器端数据分页,则应loadonce: true使用datatype: "json"选项。取决于返回数据的确切格式,并依赖于您使用的jqGrid版本,您可能需要使用jsonReader通知jqGrid如何从服务器的JSON响应中获取数据。

如果您需要实施服务器端分页,排序和过滤数据,您可以在the answer中找到相应代码的示例。

答案 1 :(得分:0)

我只需要将mydata(现在是一个字符串变量)转换为Json。现在一切正常。

      jQuery("#list").jqGrid({ data: $.parseJSON(mydata),
                datatype: "local",
                height: 150,
                width: 600,
                rowNum: 10,
                rowList: [10, 20, 30],
               .. 
               ..
              });