ASP.NET Кэшированная страница. Состояние сохранено, но требует обновления - PullRequest
0 голосов
/ 13 июля 2009

У меня есть страница веб-форм, которая довольно широко использует AJAX. На нем есть несколько ссылок, которые переносят пользователя на другую страницу. Я хочу сохранить состояние, в котором была страница, если пользователь вернется к ней с помощью кнопки «Назад» браузера.

То, как я это сделал, заключается в том, чтобы сохранять состояние страницы в сеансе каждый раз, когда пользователь взаимодействует со страницей. Когда они возвращаются на страницу, если в сеансе существует состояние, оно загружается и отображается для пользователя.

У меня такая "работа". Страница сохранена правильно и может быть загружена правильно, но, к сожалению, для ее загрузки требуется обновление страницы (F5), в противном случае она возвращается к предыдущему состоянию.

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

protected void Page_Load(object sender, EventArgs e)
{
    Response.Cache.SetCacheability(HttpCacheability.NoCache);

    if (!Page.IsPostBack)
    {
        DataBindDropDowns();

        if (HasQueryString())
        {
            SetOptionsFromQueryString();
            SavePageToSession();
            Response.Redirect("Default.aspx");
        }
        else
        {
            RestoreFromSession();
            DisplayOptions();
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 13 июля 2009

Вот мое предположение, основанное на том, что PageLoad не запускает ...

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

Поднимите Fire Bug или Fiddler и посмотрите, что HTTP-заголовок ответа MaxAge приходит с вашего сервера.

Если это так, то это то, что вам нужно удалить, так как браузер не запрашивает файл повторно, потому что ему было отказано.

0 голосов
/ 27 февраля 2011

Автономное хранилище HTML 5 - это еще один вариант, довольно удивительный, поскольку он работает во всех основных браузерах с момента выхода IE 8.

Я создал плагин jQuery для сохранения состояния формы для возвращающихся пользователей на http://www.jasonsebring.com/dumbFormState, который выполняет большую часть того, о чем вы говорите, не имеет ничего общего с серверной частью и даже работает на HTML-страницах.

Есть еще несколько функций, которые я могу добавить, например, сохранение формы полностью, чтобы ее не нужно было отображать даже при дополнительном обращении к странице. Я сосредотачиваюсь на сохранении фактических выборов, которые пользователь сделал автоматически, а затем, когда пользователь возвращается, выбор форм все еще находится там, где они остановились, и вы можете удалить их из сеанса или локального хранилища, как вы хотите, через экземпляр формы. Это смелый новый мир, идущий в HTML 5, и будет много старых парадигм, которые исчезнут, поскольку новые браузеры стирают прошлые проблемы. Поддержание состояния формы - это, безусловно, огромная и старая проблема, от которой все пользователи хотели бы уйти.

В наши дни JavaScript только усиливается, поэтому вы должны развивать эти навыки HTML 5. Я рекомендую читать, слушать и смотреть все, что есть у Дугласа Крокфорда, поскольку ваш скептицизм в отношении серьезного восприятия JavaScript испарится, и вы обнаружите, что замыкания - это лучшая вещь в программировании, кроме переменных и функций.

0 голосов
/ 13 июля 2009

Используете ли вы событие load для инициализации страницы? Когда пользователь нажимает кнопку «Назад», событие «load» не запускается, а событие «dom content ready» -.

См:

При нажатии кнопки "Назад" происходит событие кросс-браузерной загрузки?

Если вы используете jQuery, попробуйте поместить логику инициализации страницы в готовое событие, и у вас все получится. Если вы не используете jQuery, найдите подходящий способ подключения к событию DOM Content Loaded / Ready и используйте его для инициализации вашей страницы.

Если это все еще не работает, пожалуйста, опубликуйте свой код, чтобы мы могли отладить проблему.

EDIT:

Похоже, вы хотите установить соответствующий заголовок Expires, чтобы браузер перезагрузил страницу при нажатии кнопки назад. Попробуйте код со следующей страницы:

http://www.352media.com/rantingandraving/rave.aspx?raveid=325&id=212

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