Как я могу определить клиентскую сторону, когда загрузка страницы является результатом точки истории AJAX? - PullRequest
5 голосов
/ 25 мая 2010

Я пытаюсь предотвратить эффект «мерцания», возникающий на моей странице ASP.NET, который возникает, когда пользователь переходит на страницу с помощью кнопки «Назад» в браузере после перехода от нее. Причиной такого мерцания является то, что я использую панель обновлений, в которой есть некоторое содержимое при начальной загрузке страницы. В результате, когда страница загружается с помощью кнопки «Назад», исходное содержимое отображается очень кратко, прежде чем оно обновляется с правильными данными, учитывающими историю.

Чтобы преодолеть это, я собираюсь скрыть панель обновления (display: none) при начальной загрузке страницы, а затем показывать ее, пока у нас нет истории, с которой нужно иметь дело. Проблема в том, что я не могу найти, что проверить, чтобы определить, есть ли какая-либо история. Я вижу, что у Sys.Application есть элемент _history, но когда я проверяю его на странице init, он каждый раз равен нулю.

Кто-нибудь знает, что я должен проверять, чтобы определить, есть ли история, чтобы иметь дело с загрузкой страницы на стороне клиента? И в какой момент это сделать?

Ответы [ 3 ]

1 голос
/ 25 мая 2010

Кнопка браузера и его функциональные возможности полностью независимы от содержимого вашей веб-страницы.

Одна вещь, которую вы можете сделать, это установить хэш своего местоположения при обновлении AJAX. Возможно, вы сможете обнаружить это при загрузке страницы. Я не пробовал это. Вы должны иметь возможность проанализировать # часть URL-адреса на стороне сервера и посмотреть, где вы находитесь в истории AJAX.

location.hash = 'foo';
0 голосов
/ 10 сентября 2010

Поместите скрытый ввод на страницу с пустым значением, а затем при загрузке страницы установите его значение. Вы обнаружите, что при использовании кнопки «Назад» скрипт загрузки страницы обнаружит, что значение все еще установлено, и вы можете ответить соответствующим образом. Это позволяет использовать функциональность браузера, которая сохраняет содержимое формы между загрузками страниц.

0 голосов
/ 25 мая 2010

Спасибо за ваш ответ, Даниэль. Теперь у меня есть div вокруг панели обновлений, у которого свойство display установлено в none. В событии init Sys.Application я проверяю значение window.location.hash, чтобы определить, является ли загрузка страницы результатом нажатия кнопки «Назад» / «Назад» браузера. Если это не так, я устанавливаю свойство display для блокировки, если нет, то оставляю его пока как «display: none».

На стороне сервера в обработчике событий ScriptManager Navigate, который вызывается в результате нажатия кнопки «Назад», я регистрирую блок клиентского сценария, который устанавливает свойство display в block.

Я провел небольшое тестирование и, кажется, работает нормально, и я больше не чувствую мерцание. Я бы предпочел использовать один из клиентских объектов MS AJAX для проверки истории, но мы здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...