Page_Load не вызывается при повторной навигации

У меня странная проблема. Вот сценарий

Вот мои файлы:

  1. Project1.aspx
  2. Project2.aspx

Они настроены точно так же, включая их функции Page_Load:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load

If (Not Page.IsPostBack) Then

   setPrevIndex(-1)

   ...

   End If


End Sub

Оба они настроены таким образом.

Вот где я столкнулся с проблемой. Когда я перехожу на любую из этих страниц, мне нужно убедиться, что для prevIndex установлено значение -1 (с помощью функции).

  • Для Project1.aspx, когда я перехожу на страницу, срабатывает Page_Load.
  • Для Project1.aspx, когда я обновляю страницу, срабатывает Page_Load.
  • Для Project1.aspx, когда я нажимаю «Перейти» на панели навигации своего браузера, возвращаясь на текущую страницу, срабатывает Page_Load.

  • Для Project2.aspx, когда я перехожу на страницу, срабатывает Page_Load.
  • Для Project2.aspx, когда я обновляю страницу, срабатывает Page_Load.
  • Для Project2.aspx, когда я нажимаю "Go" на панели навигации своего браузера, возвращаясь на текущую страницу, Page_Load вообще не срабатывает! Функция не работает. т даже позвонил.

Есть идеи, почему ??? Что могло бы вызвать это?

Пожалуйста, попросите разъяснений.

Обновление:

Когда я нажимаю «Go» в URL, указывающем на тот же URL, кажется, что главная страница - единственное, что перезагружается, но событие Load_Page даже не срабатывает ...

Есть другие предложения?

Спасибо, E


person Erik Ahlswede    schedule 09.07.2009    source источник
comment
нет. Я не знаю, что это могло быть   -  person Erik Ahlswede    schedule 09.07.2009
comment
Просто проверьте - какой браузер вы используете? Возникает ли такая же проблема с другими браузерами?   -  person Keith    schedule 20.07.2009


Ответы (9)


Попробуйте отключить кеш вывода и посмотрите, сохраняется ли проблема:

<system.web>
  <caching>
    <outputCache enableOutputCache="false"/>
  </caching>
<system.web>
person Richard Szalay    schedule 20.07.2009
comment
Просто не забудьте повторно включить его в производственной среде;) Если вы еще не используете их, вам следует проверить профили кеша (их можно настроить / включить индивидуально). msdn.microsoft.com/en-us/library/aa661294.aspx - person Richard Szalay; 21.07.2009

Используйте LiveHTTPHeaders или Fiddler, чтобы убедиться, что страница действительно запрашивается каждый раз одинаково. Это может быть проблема с кешированием.

person Jeremy Stein    schedule 10.07.2009

Загрузите свой веб-сайт локально и перейдите на http://yourwebsite/trace.axd

Это показывает трассировку сервера для каждой страницы, а также статус сервера. Он также показывает полный жизненный цикл страницы с указанием времени.

Очистите текущую трассировку, а затем повторите 3 посещения и перезагрузите каждое в Project1.aspx и Project2.aspx.

Что теперь показывает trace.axd? У вас должно быть 6 записей, каждая с кодом состояния 200 и глаголом GET.

Если их меньше, значит, проблема в каком-то кешировании.

Если у вас их 6, проверьте сведения о последнем - что отображается для жизненного цикла события страницы? Он также покажет полную иерархию элементов управления WebForm, поэтому вы сможете определить, относится ли это к главной странице.

person Keith    schedule 21.07.2009

Попробуйте установить для previndex значение -1 в событии инициализации страницы. Я не уверен, почему это происходит.

person Eric    schedule 09.07.2009

Различные вещи, связанные с кешем, могут привести к тому, что запрос не будет выполнен, в частности, когда вы просто нажимаете кнопку «go», поэтому вам следует проверить заголовки кеша.

Если проблема заключается в кешировании, вы можете сделать что-то вроде:

//ask browser to revalidate:
context.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
//and hint that the page is outdated anyhow...
context.Response.Cache.SetMaxAge(TimeSpan.Zero);

Это должно убедить браузер действительно получать новую версию при каждом просмотре страницы. Вы можете, например, установить эти переменные в самой Page_Load ;-). Если вы не используете https, то следующие действия тоже безопасны:

//prevents plugin based file-open in IE+https, otherwise fine:
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.Cache.SetNoStore();

Готов поспорить, это решает проблему, а если нет, то я поддерживаю предложение Джереми Штейнса использовать fiddler, чтобы убедиться, что запрос действительно выполняется (и, поскольку вы веб-разработчик, в любом случае получите скрипач, это удобный инструмент, который доступен и работает для всех браузеров!).

Наконец, можете ли вы сказать, запускается ли какой-либо другой код на странице, когда вы нажимаете кнопку "Перейти"? (т.е. вся страница не работает или просто Page_Load - последнее может указывать на ошибку подключения события, что было бы странно, учитывая, что ваш обработчик нагрузки иногда срабатывает).

person Eamon Nerbonne    schedule 20.07.2009

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

person Alex    schedule 16.07.2009

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

Если это все еще происходит, вероятно, ваш браузер что-то делает в отношении кеширования.

person Kelsey    schedule 18.07.2009

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

person gilbertc    schedule 20.07.2009

Если у вас есть это (или подобное) вверху вашей страницы (или главной страницы), это приведет к следующему:

<%@ OutputCache Duration="3600" VaryByParam="none" %>
person Steve Woods    schedule 05.05.2016