jqGrid:未发布到服务器的其他编辑参数

时间:2012-06-05 16:33:19

标签: jquery asp.net-mvc jqgrid

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

$(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();
                }
            }
        });
});

1 个答案:

答案 0 :(得分:2)

我认为您遇到问题的原因是两次调用 navGrid,而不是一次。 navGrid方法创建导航栏。您只能在网格中创建一个导航栏。

如何从navGrid nav代码中查看函数测试是否存在this.nav = true;属性,该属性将由该方法创建(请参阅the line仅指定{ {1}})。所以代码

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 });