ASP.NET MVC3从Controller返回多个数据集到jqGrid

时间:2012-06-14 13:26:44

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

在我的MVC3应用程序中,我使用控制器actionresult返回两组Json数据,以传递给我视图中的两个单独的jqGrids。

控制器的actionresult的返回看起来像:

return Json(new
        {
            A= holderA,
            B= holderB
        },JsonRequestBehavior.AllowGet);  

其中A和B是从LINQ到SQL查询获得的数据数组。

我必须在我的视图中jquery jqGrids,第一个应该接受我的结果的“A部分”中的数据,第二个网格应该接受我的结果的“B部分”中的数据。

我需要知道如何在jqGrid中访问我的actionresult(即A和B)的每个单独组件,是否有一个特定的选项允许您引用数据的来源?

如果它有帮助就是一个网格看起来像......

jQuery("#GridA").jqGrid({
        url: "/MyController/MyActionresult",
        datatype: 'json',
        postData: {
            Name: function () {
                return $("#Name").val();
            },
            Year: function () {
                return $("#SelectedYear").val()
            }
        },

        mtype: 'POST',
        colNames: ['Name', 'Age', 'Total']
        colModel: [

                { name: 'Name', index: 'Name', align: 'left' },
                { name: 'Age', index: 'Age', align: 'left' },
                { name: 'Total', index: 'Total', width: 150, align: 'left', search: false }],
        pager: jQuery('#GridAPager'),
        rowNum: 250,
        height: 250,
        rowList: [250, 500, 1000, 2000],
        sortname: 'Name',
        sortorder: "asc",
        viewrecords: true,
        hiddengrid: false,
        caption: 'List of People',
        gridComplete: function () {
            onGridComplete("#GridA");}
    });
    $("#GridA").jqGrid('filterToolbar', { stringResult: true, searchOnEnter: true });
});

第二个网格几乎完全相同,显示的字段略有不同。

我希望从一个动作结果中传回两个数据集的原因是因为一旦单击表单提交按钮,两个网格都会被填充。

任何帮助都会很棒,

感谢。

1 个答案:

答案 0 :(得分:1)

了解holderAholderB中数据的确切格式非常重要。您应该定义与数据结构相对应的jsonReader

您应该明白,如果您使用选项mtype: 'POST',则无法缓存返回的数据,并且填写“#GridA”和“#GridB”将完成不同的请求。因此,在一个Action中合并两个响应将没有任何优势。

此外,如果用户点击“#GridA”列“名称”的列标题上的另一个请求,则会向网址"/MyController/MyActionresult"发送另一个请求。在请求中,参数sord的值在初始请求中将是“desc”而不是“asc”。如果用户将页面大小从250更改为500,或者用户更改了需要显示的页面,则也会发送对服务器的新请求。

我试图解释为页面上的所有网格都有单独的操作是有意义的。如果没有显示所有数据,并且如果您实施了服务器端排序和分页,则将所有组合在一起并没有多大意义。