2012-06-05 2 views
0

Я использую вспомогательный помощник Lib.Web.MVC, поэтому мой исходный jqGrid JS генерируется этим объектом. После вызова @ grid.GetJavaScript я затем выдаю отдельный вызов для изменения коллекции editData, как указано ниже. Вот эффективный JS, который я использую. Значения AreaId и AreaItemId никогда не попадают в действие контроллера.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 создает панель навигации. Вы можете создать только один навигационная панель в сетке.

Как вы можете видеть из the line кода из navGrid функция тест существование nav имущества, которое будет упаковали методом (см 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

Извините за форматирование кода. Я не знаю, как правильно это сделать на SO, и я вынужден использовать 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