Мы пишем поисковое приложение, которое сохраняет критерии поиска в состоянии сеанса и выполняет поиск внутри панели обновлений asp.net. Иногда, когда мы последовательно выполняем несколько поисков, второй или третий поиск иногда возвращает результаты из первого набора критериев поиска.
Пример: при первом поиске мы ищем «Джон Смит» -> отображаются результаты Джона Смита. При втором поиске мы ищем результаты «Боб Джонс» -> Джон Смит.
Мы сохраняем все критерии поиска в состоянии сеанса, как я уже сказал, и читаем его из состояния сеанса внутри запроса ajax для форматирования запроса БД. Когда мы ставим точки останова в VS, все ведет себя как обычно, но без них мы получаем исходные критерии поиска и результаты.
Я предполагаю, что, поскольку они сохраняются в сеансе, ajax-запрос каким-то образом получает свой собственный сеанс и сохраняет для него критерии, а затем каждый раз получает критерии из этого сеанса, но не асинхронный материал способен видеть когда критерии изменяются и сохраняют изменения для соответствующего состояния, но поскольку они происходят из двух разных сеансов, возникает несоответствие в том, что сохраняется и читается.
EDIT :::
Более подробно, было предложено добавить критерии поиска в строку запроса, что обычно является хорошей практикой, и я согласен, что так и должно быть, но, следуя нашим требованиям, я не считаю его жизнеспособным. Они хотят, чтобы пользователь заполнял поиск элементов управления вводом, и при этом перезагрузка страницы не выполнялась. Единственное, что он видит, - это индикатор прогресса на странице, и у них все еще есть возможность перемещаться и использовать другие функции на текущей странице. Если бы я добавил критерии в строку запроса, мне пришлось бы сделать еще один запрос, заставляющий загружать всю страницу, что в зависимости от критериев поиска может занять очень много времени. Вот почему мы используем вызов ajax для выполнения поиска и почему мы не вызываем еще один полный запрос страницы ..... Надеюсь, это прояснит ситуацию.