Почему Page_Load не запускается после возвращения с другой страницы с использованием ASP.NET - эрго эпическое смущение - PullRequest
8 голосов
/ 17 февраля 2010

Допустим, у меня есть две страницы на одном веб-сайте ASP.NET C #.

  • Page1.aspx работает в событии Page_Load
  • Я перехожу к Page2.aspx с помощью меню
  • Page2.aspx делает некоторые вещи затем Response.Redirect обратно на Page1.aspx
  • Page1.aspx не может делать что-либо в событии Page_Load на этот раз, потому что он никогда не срабатывает.

Я попытался декларативно отключить кэш, попытался использовать true для endResponse в моем перенаправлении ... Ничего не изменилось.

Не бери в голову всех! Я дебил! Используя Visual Studio Dev Localhost, Redirect перенаправлял на живую страницу! :)

Ответы [ 7 ]

14 голосов
/ 17 февраля 2010

Причина выполнения страницы не влияет на цикл страницы, событие Load всегда срабатывает при выполнении страницы.

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

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

Response.Cache.SetCacheability(HttpCacheability.NoCache);

Это предотвратит кэширование страницы в нормальных условиях. (Проверьте также, что ваш браузер не находится в автономном режиме, тогда он будет использовать что-либо в кэше независимо от настроек кеширования.)

5 голосов
/ 17 февраля 2010

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

Вы можете подтвердить это, используя Fiddler .

Я не уверен, правда ли это во всех браузерах.

2 голосов
/ 17 февраля 2010

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

Этого обычно достаточно, чтобы обойти большинство механизмов кэширования страниц.

1 голос
/ 17 февраля 2010

Попробуйте использовать Server.Transfer вместо Response.Redirect.

Клиент не увидит изменения URL, но это может не иметь значения, в зависимости от ваших требований

0 голосов
/ 27 августа 2015

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

Response.AppendHeader("Cache-Control", "no-store");

Примените это при загрузке главной страницы.

0 голосов
/ 20 июля 2015

Переключение VS из режима отладки в режим Release работало для меня ....

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

У меня была такая же проблема, и я обнаружил, что это работает для меня: (добавьте это в раздел Page_Load)

    if (this.Master.Page.Header != null && Session["RELOAD"] == null)
    {
        System.Web.UI.HtmlControls.HtmlHead hh = this.Master.Page.Header;
        System.Web.UI.HtmlControls.HtmlMeta hm = new System.Web.UI.HtmlControls.HtmlMeta();
        hm.Attributes.Add("http-equiv", "Refresh");
        hm.Attributes.Add("content", "3");
        hh.Controls.Add(hm);
    }

и затем я добавляю Session ["RELOAD"] = "1" сразу после того, как он выполняет код, который я хочу запустить, чтобы предотвратить его повторное обновление снова и снова. Работает как шарм.

...