#jqgrid
#jqgrid
Вопрос:
Я не могу видеть никаких значений параметров, передаваемых на сервер в firebug. Вот код.
//BuyBackGridInit() start
function BuyBackGridInit(tabID){
$('table[id$="' tabID '_BuyBackGrid"]').jqGrid({
url :'/Controls/Advertiser/BuyBackControlNew.ascx.ashx?action=getBuyBackData',
datatype: 'json',
mtype: 'POST',
height:'100%',
width:'100%',
colNames: result.colNamesData,
colModel: result.colModelData,
postData: {
advertiserID: function() { return $('#advertiser_id').text(); },
CampaignsDdlSelectedValue: function() { return $('select[id$="CampaignDdl"] option:selected').val(); },
startDate: function() { return $('input[id$="' tabID '_FromCalBuyBack_CalendarTbx"] ').val(); },
endDate: function() { return $('input[id$="' tabID '_ToCalBuyBack_CalendarTbx"] ').val(); }
},
rowNum : 100,
shrinkToFit :false,
altRows: true,
altclass:'altRow',
autowidth: true,
multiselect: true,
gridComplete:function (){
var recs = parseInt( $('table[id$="' tabID '_BuyBackGrid"]').getGridParam("records"),10);
if (recs == 0){
$('div[id$="' tabID '_NoDataFoundBuyBackdiv"]').show();
$('input[id$="AddToCartBtn"]').hide();
$('input[id$="BuyBackDownloadBtn"]').hide();
}
else {
$('div[id$="' tabID '_NoDataFoundBuyBackdiv"]').hide();
$('input[id$="AddToCartBtn"]').show();
$('input[id$="BuyBackDownloadBtn"]').show();
}
},
serializeGridData: function (data){
return $.toJSON(data);
}
});//end of jQuery("#BuyBackGrid").jqGrid()
}//BuyBackGridInit() End
Спасибо,
A
Ответ №1:
Ваша текущая реализация serializeGridData
просто удаляет все параметры функций из postData
. Поэтому вам следует либо расширить data
параметр внутри serializeGridData
вместо использования postData
. Другой способ — изменить serializeGridData
на следующее:
serializeGridData: function (data){
var propertyName, propertyValue, dataToSend = {};
for (propertyName in data) {
if (data.hasOwnProperty(propertyName)) {
propertyValue = data[propertyName];
if ($.isFunction(propertyValue)) {
dataToSend[propertyName] = propertyValue();
} else {
dataToSend[propertyName] = propertyValue
}
}
}
return JSON.stringify(dataToSend);
}
В приведенном выше коде мы перечисляем все свойства и вызываем все функции явно. Более того, я предпочитаю использовать JSON.stringify
функцию из json2.js. Функция будет встроена во многие веб-браузеры.
Смотрите демонстрацию здесь.
Комментарии:
1. @Oleg : Я заменил свои serializeGridData вашим фрагментом кода. Теперь я вижу, как параметры передаются на сервер в firebug. Это работает нормально. Но это не меняет значения. Он продолжает получать старые значения из элементов управления. Я думал, что postData: part должен позаботиться об этом. Но этого не произошло. Спасибо
2. @user659469: Вы написали «Но это не меняет значения. Он продолжает получать старые значения из элементов управления «. Извините, но я не понимаю, какие настройки и какие значения вы имеете в виду. Более того, вы ни разу не публиковали HTML, который используете.
3. @Oleg: Я имею в виду управляющие значения, которые я устанавливаю в качестве параметров внутри части postData. postData: { advertiserID: функция() { return $(‘#advertiser_id’).text(); }, CampaignsDdlSelectedValue: функция() { return $(‘выберите [id $=»CampaignDdl»] вариант: выбранный’).val(); }, StartDate: функция() { return $(‘ввод [id $=»‘ tabId ‘ _FromCalBuyBack_CalendarTbx»] ‘).val(); }, Конечная дата: функция() { return $(‘input[id $=»‘ tabId ‘_ToCalBuyBack_CalendarTbx»] ‘).val(); } }, CampaignsDdlSelectedValue, дата окончания, дата начала — все это не меняется!
4. @user659469: Почему вы имеете в виду, что jqGrid должен изменить содержание любых элементов управления, которые находятся за пределами сетки?
5. @Oleg: Я думал, мы обсуждаем значения элементов управления вне сетки! Я понимаю, о чем ты говоришь. Но я хочу передать новые значения на сервер для элементов управления вне jqgrid. Например, диапазон дат (текстовое поле), CampaignID (выпадающий список), которые находятся за пределами jqgrid.