Я использую последнюю версию jqGrid: 3.6.4
Это походит на простую проблему (или по крайней мере она сделала, прежде чем я провел несколько часов на нее):
Когда сетка отправляет запрос к серверу (к действию контроллера), его тип контента всегда:
application/x-www-form-urlencoded; charset=UTF-8
и я хотел бы, чтобы это было:
application/json; charset=utf-8
но я не могу найти способ установить тип контента (нет никакой contentType опции, поскольку Вы нашли бы на $ .ajax вызов, например).
Так просто для уточнения я не спрашиваю, как установить тип контента на запросе к серверу jQuery, но конкретно использующий jqGrid, который не предоставляет очевидную возможность для того, чтобы сделать это.
Спасибо, Nigel.
Обновление: зафиксированный ответ Oleg решил его.
Вот настройки опции для сетки:
jQuery("#ContactGridList").jqGrid({
url: '/ContactSelect/GridData/',
datatype: 'json',
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
mtype: 'POST',
...
Как вы можете найти в коде grid.base.js вызов $. Ajax
, заполняющий grid contain выглядит следующим образом:
$.ajax($.extend({
url: ts.p.url,
type: ts.p.mtype,
dataType: dt,
data: $.isFunction(ts.p.serializeGridData) ?
ts.p.serializeGridData.call(ts, ts.p.postData) : ts.p.postData,
complete: function (req, st) {
...
}
...
}, $.jgrid.ajaxOptions, ts.p.ajaxGridOptions));
Таким образом, вы можете использовать опцию ajaxGridOptions
в jqGrid для установки или переопределения любого параметра запроса $. ajax
. Поскольку я использую только запросы JSON к моему серверу, я установил общие настройки contentType
, например
$.extend($.jgrid.defaults, {
datatype: 'json',
{ajaxGridOptions: { contentType: "application/json" },
{ajaxRowOptions: { contentType: "application/json", type: "PUT" },
...
});
ajaxRowOptions
используются в grid.inlinedit.js для строки редактирование. Для редактирования формы есть и другие параметры, которые я также установил как глобальные:
$.extend($.jgrid.edit, {
ajaxEditOptions: { contentType: "application/json" },
...
});
$.extend($.jgrid.del, {
ajaxDelOptions: { contentType: "application/json" },
mtype: "DELETE",
...
});
Как вы можете видеть, мой сервер - это служба RESTfull (разработанная в основном в WFC, а остальные - в ASP.NET MVC). Поскольку $. Jgrid.edit
является настройкой как для «добавления», так и для «изменения» элементов, я не мог изменить mtype: «PUT»
только для «редактирования», поэтому я это в параметрах navGrid ()
.
Последний параметр ajax, который вам также может быть интересно установить, - это ajaxSelectOptions
. Вы можете установить его так же, как ajaxGridOptions
. Параметры ajaxSelectOptions
полезны, если вы используете параметр dataUrl
внутри editoptions
или searchchoptions
. Я использую, например, dataUrl
внутри colModel
для определения столбцов типа edittype: 'select'
. Возможные значения параметра выбора будут загружены с сервера для встроенного редактирования или редактирования формы или внутри диалогового окна поиска. Поскольку для такой загрузки данных используется ajax, существует соответствующая опция ajaxSelectOptions
.
С уважением.