0

我正在尝试使用存储在隐藏字段中的数据填充 jqgrid。我已经成功尝试了从serverdata(数据类型= 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,“货币”:“阿拉伯联合酋长国”,“国家”:“阿拉伯联合酋长国迪拉姆”,“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,“货币”:“阿拉伯联合酋长国”,“国家”:“阿拉伯联合酋长国迪拉姆”,“shortName”:“AED”,“ExchRate”: 20.000}];

它,工作正常。

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

4

2 回答 2

1

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

如果您想一次返回所有数据而不实现服务器端数据分页,您应该loadonce: true另外使用选项datatype: "json". 取决于返回数据的确切格式并取决于您使用的 jqGrid 版本,您可能需要使用jsonReader它来告知 jqGrid 如何从服务器的 JSON 响应中获取数据。

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

于 2013-06-20T11:46:19.910 回答
0

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

      jQuery("#list").jqGrid({ data: $.parseJSON(mydata),
                datatype: "local",
                height: 150,
                width: 600,
                rowNum: 10,
                rowList: [10, 20, 30],
               .. 
               ..
              });
于 2013-06-21T04:38:05.133 回答