2012-06-05 58 views
0

我使用Lib.Web.MVC帮助器,所以我的初始jqGrid JS是由该对象生成的。在调用@ grid.GetJavaScript之后,我发出一个单独的调用来修改editData集合,如下所示。这是我正在使用的有效JS。 AreaIdAreaItemId的值不会被提交给控制器操作。jqGrid:其他编辑参数没有发布到服务器

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

回答

2

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

如何从的navGrid功能测试存在nav财产将由方法装箱的代码the line看到(见the line刚刚分配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 }); 
+0

对不起,关于代码格式。我不知道如何正确地做到这一点,我不得不在工作中使用IE8。 :) Lib.Web.Mvc助手用于为网格生成原始JS,并且ExtraData参数不能使用。有什么办法可以发出后续调用来更新导航属性吗? –

+0

@ LSU.Net:您可以使用'.extend($。jgrid.edit,{...}'方法至少设置'editData'。我不知道'Lib.Web.Mvc',但是我 – Oleg

+0

@ LSU.Net:顺便说一下[这里](http://meta.stackexchange.com/a/22189/147495)描述了如何格式化代码。一般来说,如果你只是选择完整的代码片段,然后按下编辑窗口上方的“{}”按钮,将在每个标记行中添加4个空格,因此代码将被格式化为正确格式。 – Oleg

相关问题