我正在尝试使用存储在隐藏字段中的数据填充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数组,而不仅仅是一个字符串。有什么建议吗?
答案 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],
..
..
});