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

Jquery jqGrid:未将其他编辑参数发布到服务器,jquery,asp.net-mvc,jqgrid,Jquery,Asp.net Mvc,Jqgrid,我使用的是Lib.Web.MVChelper,因此我的初始jqGrid JS是由该对象生成的。在调用@grid.GetJavaScript之后,我将发出一个单独的调用来修改editData集合,如下所述。下面是我正在使用的有效JS。AreaId和AreaItemId的值永远不会提交给控制器操作 $(document).ready(function () { $('#GetAreaItemDetails').jqGrid({ colNames: ['Code', 'Name

我使用的是
Lib.Web.MVC
helper,因此我的初始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();
                }
            }
        });
});

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

如何从
navGrid
的代码中查看将由该方法装箱的
nav
属性的功能测试存在性(请参见仅分配
this.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 });

很抱歉,代码格式有问题。我不知道如何正确地使用IE8,因此我不得不在工作中使用IE8Lib.Web.Mvc helper用于为网格生成原始JS,不能使用ExtraData参数。有没有办法发出后续调用以更新导航属性?@LSU.Net:您可以使用
$.extend($.jgrid.edit,{…}
至少要设置
editData
。我不知道
Lib.Web.Mvc
,但我想所有这些都能正常工作。@LSU.Net:顺便说一句,说明了如何格式化代码。一般来说,如果您只选择完整的代码片段并按
{}
编辑窗口上方的按钮将在每个标记行中添加4个空格。因此,代码的格式已经正确。