2016-02-09 3 views
0

Я вижу два разных поведения и не знаю почему. Части вопроса являются результатом тестирования решений, реализованных от других Q & А.jqGrid Применение фильтров postdata в сетке создает поведение ODD

Сокращенная Сетка создания (я включал только свойства, имеющие отношение к вопросу) ...

сетки Setup1

url: jqDataUrl, 
datatype: "json", 
mtype: "GET", 

//loadonce: true 

// Default sorting 
sortname: typeof prefs.sortCol !== "undefined" ? prefs.sortCol : "LastName", 
sortorder: typeof prefs.sortCol !== "undefined" ? prefs.sortOrd : "asc", 
sorttype: "text", 
sortable: true, 

postData: { filters: JSON.stringify({ "groupOp": "AND", "rules": [{ "field": "FirstName", "op": "cn", "data": "max" }]})}, 
search: true, 

Результаты 1 с поиском: true

Когда первая сетка сначала загружается, она загружается с фильтрованными результатами из фильтры postdata. Если я перейду к редактированию URL-результирующей строки и вернусь, запись в сетке не будет обновлена, даже если вышеперечисленная страница/сетка перезагружается с нуля с сервера.

установка сетки 2

//same as above but 
search: false 

Результаты 2 с поиском: ложные

При загрузке сетки в этот раз, фильтр не применяется. Если я перейду к редактированию url строки и вернусь, запись будет обновлена.


Я прочитал много сообщений о настройке loadonce: верно, и изменения типа данных от локального до и JSON JSON местных для освежающего, но то, что я хочу, чтобы сетка всегда загружать, сортировать и фильтровать из данных сервера.

Хотя я понимаю, что бесплатный jqGrid делает все лучше, к сожалению, я не могу заменить текущий файл jqGrid.js.

Мой вопрос две части:

1) Я не вижу, искать в качестве опции на вики here так где она определена.

2) Могут ли и как получить фильтры postdata для применения при загрузке И мои записи обновлены в сетке после редактирования?

+0

Итак, вы используете 'loadonce: true' в первом сценарии или нет?Вы хотите применить фильтрацию ** локально ** или ** на сервере **? Какой 'editurl' вы используете' 'clientArray'' или некоторый URL-адрес сервера? Какой режим редактирования вы используете? Вы написали «Я не могу заменить текущий файл jqGrid.js», но вы не написали **, какую версию и из какой вилки вы используете **. Важно понимать, что вы не можете просто изменить 'datatype' с json на local в любое время. Важно, чтобы вы в то время заполняли параметр data. Только если заполняется параметр data, вы можете работать с сеткой, как с локальной сеткой. – Oleg

+0

Не использовать loadonce: true. Просто поставьте uncommented выше, чтобы его можно было увидеть не используемым. Редактирование строки отправляется на другую страницу, связанную с сервером, и сохранение/отмена на этой странице перезагружает исходную страницу сетки, поэтому я предполагаю, что при перезагрузке сетки она должна получать последние данные для сетки, но этого не делает. Я думаю, что один вопрос заключается в том, почему поиск: true применяет фильтры postdata, но не позволяет загружать сетку с новыми обновленными значениями, но вместо этого показывает старые значения, пока я не удалю кнопку обновления данных? И почему поиск: false не позволяют применять фильтры postdata? – MaxAx

+0

@Oleg Я выяснил результаты 1 выпуск выше. С поиском: true, когда я возвращаюсь с страницы редактирования, контроллер mvc получал данные с сеанса, не запрашивая базу данных для новых данных. Условное использование сеанса или базы данных было основано на некоторой связанной переменной. Не уверен, к чему это привязано, но прокомментировал это и работает так, как ожидалось. Не выяснили поиск: ложная проблема (результаты 2 выше). В контроллере предложение where для сетки заполняется фильтром postdata, но все результаты возвращаются из запроса вместо фильтрации. Очень странно. Взгляд в больше. – MaxAx

ответ

0

Чтобы ответить на мои собственные вопросы:

1) поиск: верно будет посылать _search == верно в запросе HTTP.

2) Фильтры postdata (например, где запрос при запросе данных) отправляются в HTTP-запросе, однако мой контроллер выполнял разные операции на основе поиска: aka_search), проанализированного из http-запроса.

Внутри моего контроллера я устанавливал другое свойство, основанное на значении _search, и затем свойство контроллера использовалось для определения необходимости обновления данных сетки или использования сеанса. Он использовал сеанс и, таким образом, не обновлял мои отфильтрованные результаты после редактирования.

Еще одна проблема, которую я обнаружил, заключалась в том, что если бы у меня был поиск: true и ручной сброс фильтров postdata для {}, у моего контроллера была ошибка (не выбрана без попытки/уловки), когда он пытался установить linq с помощью null, и вышел из настройки сетки и ничего не отобразил.