Я думаю, что основная проблема, которая у вас есть, заключается в том, что параметр filters
будет отправлен jqGrid в другим способом как и все остальные параметры. Вы можете определить его как string
и сделать преобразование в FilterModel
от JSON вручную (используя JsonConvert.DeserializeObject<FilterModel>(filters)
от Newtonsoft.Json
или используя serializer.Deserialize<FilterModel>(filters)
, где JavaScriptSerializer serializer = new JavaScriptSerializer();
). Мне кажется самым простым способом. Вы можете использовать специализированное связующее устройство MVC, но в итоге вы получите те же результаты.
В качестве альтернативы вы можете попробовать изменить значение параметра filters
, посылающие jqGrid
serializeGridData: function (postData) {
var dataToSend = $.extend({}, postData); // make copy
if (dataToSend.filters) {
dataToSend.filters = $.parseJSON(postData.filters);
}
// the last statement can be not needed and one should just use
// return dataToSend;
// instead. If one do convert the data to JSON as in the line below
// one should use ajaxGridOptions: { contentType: "application/json" }
// option of jqGrid to set the corresponding ContentType HTTP header
return JSON.stringify(dataToSend);
}
Я не тестировал код выше, но я думаю, что она могла бы работать.
Кроме того, я хочу опубликовать некоторые общие замечания.
Вам необходимо реализовать обработку и фильтрацию на стороне сервера только для действительно больших данных. В случае наличия менее 1000 строк данных, например, я предпочитаю использовать параметр loadone: true
и возвращать все данные по одному клиенту. Фильтрация такого набора данных на стороне клиента работает очень хорошо (и даже быстрее, поскольку фильтрация на стороне сервера), и вам не нужно писать код сервера для фильтрации. Итак: не пытайтесь использовать фильтрацию на стороне сбоку на небольшом наборе данных.
Следующее примечание. Если вы используете только расширенный поиск, вы можете удалить параметры searchField
, searchOper
и searchString
. «Простой» поиск - это устаревшая модель.
Следующее замечание: по умолчанию имена параметров, которые отправляют jqGrid, не самые лучшие: sidx
, sord
, _search
. Можно использовать параметр prmNames
jqGrid для переименовать почти все параметры отправлены jqGrid. Например, если вы используете prmNames: {sort: "sortIndex", order: "sortDirection", search: "isSearching"}
, вы можете переименовать sidx
в sortIndex
, sord
в sortDirection
и _search
в isSearching
в SearchModel
.
Последнее замечание. Если вам действительно нужно реализовать фильтрацию данных на стороне сервера, вы можете рассмотреть возможность реализации модели , описанной here. Он включает в себя groups
часть вместе с rules
. Часть groups
будет заполнена, если вы воспользуетесь опцией multipleGroup: true
вместе с multipleSearch: true
.
Не могли бы вы разместить полный запрос json, который вы получаете? –
Извините, но как получить JSON? Я использую параметр URL JQGrid для указания действия и ничего другого. –
Вы попробовали мой ответ? –