0

我正在使用Lib.Web.MVC帮助程序,所以我的初始 jqGrid JS 是由该对象生成的。在调用@grid.GetJavaScript 之后,我发出一个单独的调用来修改editData集合,如下所示。这是我正在使用的有效 JS。AreaId和的值AreaItemId永远不会提交给控制器操作。

$(document).ready(function () {
    $('#GetAreaItemDetails').jqGrid({
        colNames: ['Code', 'Name', 'Description', 'Has Addl Comments'],
        colModel: [
            { editable: true, editoptions: { "maxlength": 16 }, editrules: { required: true },
                name: 'AreaItemDetailCode'
            },
            { editable: true, editoptions: { "maxlength": 32 }, editrules: { required: true },
                name: 'AreaItemDetailName'
            },
            { editable: true, editoptions: { "maxlength": 128 }, editrules: { required: true },
                name: 'AreaItemDetailDescription'
            },
            { editable: true, edittype: 'checkbox', editrules: { required: true },
                name: 'HasAdditionalComments'
            }],
        caption: 'Area Item Details',
        url: '/Admin/GetAreaItemDetails',
        datatype: 'json',
        footerrow: true,
        jsonReader: { repeatitems: false, id: 'Id', subgrid: { repeatitems: false} },
        mtype: 'POST',
        pager: '#GetAreaItemDetailsPager',
        prmNames: { npage: 'npage' },
        rowList: [10, 20, 30, 40, 50],
        rowNum: 10,
        sortname: 'AreaItemDetailId',
        viewrecords: true,
        height: '100%'
    }).jqGrid('navGrid', '#GetAreaItemDetailsPager',
        { search: false },
        { height: 175, url: '/Admin/UpdateAreaItemDetail', width: 400, recreateForm: true,
            closeAfterEdit: true
        },
        { height: 175, url: '/Admin/InsertAreaItemDetail', width: 400, recreateForm: true,
            closeAfterAdd: true
        });

    $("#GetAreaItemDetails").jqGrid('navGrid', '#GetAreaItemDetailsPager',
        {/*navGrid options*/},
        {
            editData: {
                AreaItemId: function () {
                    return $('#ddlAreaItems').val();
                },
                AreaId: function () {
                    return $('#ddlAreas').val();
                }
            }
        },
        {
            editData: {
                AreaItemId: function () {
                    return $('#ddlAreaItems').val();
                },
                AreaId: function () {
                    return $('#ddlAreas').val();
                }
            }
        });
});
4

1 回答 1

2

我想你的问题的原因是你做了两个电话navGrid不是一个。navGrid 方法创建导航栏。您只能在网格中创建一个导航栏。

您如何从函数测试的代码中看到将由方法创建的属性的存在(参见刚刚分配的行)。所以代码navGridnavthis.nav = true;

if(this.nav) {return;}

将仅用于跳过该方法的第二次执行。

因此,要解决您的问题,您应该将两个调用合二为一:

...
}).jqGrid('navGrid', '#GetAreaItemDetailsPager',
    { search: false },
    { height: 175, url: '/Admin/UpdateAreaItemDetail', width: 400, recreateForm: true,
        closeAfterEdit: true,
        editData: {
            AreaItemId: function () {
                return $('#ddlAreaItems').val();
            },
            AreaId: function () {
                return $('#ddlAreas').val();
            }
        }
    },
    { height: 175, url: '/Admin/InsertAreaItemDetail', width: 400, recreateForm: true,
        closeAfterAdd: true,
        editData: {
            AreaItemId: function () {
                return $('#ddlAreaItems').val();
            },
            AreaId: function () {
                return $('#ddlAreas').val();
            }
        }
    });

如果您将常用的添加和编辑设置设置为表单编辑的默认设置(在页面上),则可以减少代码

$.extend($.jgrid.edit, {
    height: 175,
    url: '/Admin/InsertAreaItemDetail',
    width: 400,
    recreateForm: true,
    closeAfterAdd: true,
    closeAfterEdit: true,
    editData: {
        AreaItemId: function () {
            return $('#ddlAreaItems').val();
        },
        AreaId: function () {
            return $('#ddlAreas').val();
        }
    }
});

调用navGrid. 在这种情况下,调用本身可以减少到

...
}).jqGrid('navGrid', '#GetAreaItemDetailsPager', { search: false });
于 2012-06-05T17:24:08.133 回答