Я генерирую jqgrid из класса модели, который передаю в поле зрения. Я создаю и работаю с jqgrid. Однако я хочу установить postData в одном представлении, где я использую jqGrid, из сценария в этом представлении после вызова помощника для создания jqgrid без необходимости изменять целое частичное представление, которое создает jqgrid.
Я пробовал бежать
$("#@Model.Id").jqGrid('setGridParam', { postData: { test: 233} });
и
$("#@Model.Id").setGridParam({ postData: { test: 233} });
но без ошибок или каких-либо результатов. Если я установил postData в параметрах jqgrid (в частичном представлении, где он построен, он работает.
Я также проверил, что сетка существует, добавил
console.log($("#@Model.Id").size());
перед первой строкой, и он показывает 1.
ОБНОВЛЕНИЕ: эта функция .setGirdParam начала работать у меня без видимой причины, поэтому я приму ответ, если кто-то может дать некоторое представление о том, что может помешать этому работать. Спасибо
Ответ 1 · рейтинг 12 · Oleg
Вы не включили определение jqGrid в свой вопрос, и мы не можем увидеть место, где вызывается setGridParam. Прежде всего вы должны использовать setGridParam после создания jqGrid, но до будет отправлен запрос. Если вы измените postData , следующий запрос jqGrid может использовать новый параметр. Так что обычно используют
$("#@Model.Id").trigger('reloadGrid', [{page:1}]);
см. здесь.
Полагаю, что лучшим вариантом для вас будет использование свойства function test объекта postData в качестве функции:
$("#@Model.Id").jqGrid({
// ... other jqGrid parameters ...
postData: {
test: function() {
// the code can by dynamic, read contain of some elements
// on the page use "if"s and so on and return the value which
// should be posted to the server
return 233;
}
}
// other jqGrid parameters ...
});
См. подробности здесь. Таким образом можно реализовать практически любой сценарий.
Кстати, если вы не хотите, чтобы jqGrid отправлял какие-либо запросы на сервер, пока событие не произошло, вы можете использовать datatype:'local' во время инициализации. Затем, если вы хотите, чтобы сетка была заполнена, вы можете использовать setGridParam, чтобы изменить datatype с 'local' на 'json' (или 'xml') и вызвать .trigger('reloadGrid',...).