В браузере ASP.NET отображается кнопка «Назад» (после публикации сообщения). - PullRequest
6 голосов
/ 19 марта 2012

У меня проблемы с простым приложением ASP.NET и кнопкой «Назад» после публикации назад.

На рассматриваемой странице имеется простая форма, некоторые текстовые поля и т. Д., А также раскрывающийся список, который выполняет обратную передачу (автоотложку).

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

Проблема, с которой я столкнулся, заключается в том, что после того, как пользователь изменил выпадающий список и завершил обратную передачу, пользователь нажимает кнопку возврата. Они видят сообщение об истечении срока действия веб-страницы в IE.

Я установил следующее:

Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.Private);

Но, похоже, это не решило проблему.

Фактический заголовок ответа Cache-Control читается как: private, no-cache: "Set-Cookie"

В классическом ASP-приложении с заголовком ответа Cache-Control, состоящим только из «private», кнопка «Назад» ведет себя, как и ожидалось, после «post back».

Есть ли способ заставить ASP.NET явно установить элемент управления кэшированием на «частный»? Или любое другое решение, которое приводит к тому, что кнопка «Назад» и обратные передачи работают хорошо вместе?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 12 апреля 2012

В зависимости от ситуации вам может понадобиться этот хак / обходной путь:

 private void Page_PreRender(object sender, System.EventArgs e)
    {
        if (IsPostBack && !IsCallback)
        {

            Response.Write("<html><head><script>location.replace('" + Request.Path + "');\n" + "</script></head><body></body></html>\n");

            Response.End();

        }

    }
1 голос
/ 19 марта 2012

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

Это будет строка кода:

Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1)); 

Это было проблемой, особенно в WebForms ASP.NET из-за того, как работает обратная передача, по сравнению с другими платформами.

Для подробного объяснения всех связанных с этим вопросов я настоятельно рекомендую прочитать статью, на которую ссылаются ниже. Он не дает прямого ответа на ваш вопрос, но я думаю, что вы получите от него больше информации, чем простой ответ, и поможет вам продумать ваши варианты, вооружившись лучшим пониманием рассматриваемой проблемы. Обязательно прочитайте части 1 И 2.

http://www.4guysfromrolla.com/webtech/111500-1.shtml

У меня есть идея о том, как заставить кнопку «назад» снова вести себя как кнопку «назад», чтобы обратные передачи не рассматривались как навигация по страницам:

Лично я принял (возможно, хакский / неаккуратный) подход просто помещать вещи в UpdatePanel, когда я не хочу конфликта кнопок postbacl / back, так как я все равно использую Ajax в большинстве своих приложений. Это заставляет кнопку «назад» фактически возвращаться на предыдущую страницу, вместо того, чтобы оставаться на той же странице, но возвращаться к контрольным значениям, какими они были до обратной передачи.

...