2012-06-05 3 views
0

У меня есть приложение ASP.NET 4.0, которое использует CrossPagePostback. Я только заметил, что моя исходная страница загружается дважды, и я не могу найти причину. Вот общая логика:CrossPagePostback: исходная страница загружена дважды

BasePage.vb:

Public Class BasePage 
    Inherits System.Web.UI.Page 

Protected Overrides Sub OnPreInit(e As System.EventArgs) 
    If IsCrossPagePostBack Then Exit Sub 
    ... 
    Common code 
    ... 
    MyBase.OnPreInit(e) 
End Sub 

Protected Overrides Sub OnInit(e As System.EventArgs) 
    If IsCrossPagePostBack Then Exit Sub 
    ... 
    Common code 
    ... 
    MyBase.OnInit(e) 
End Sub 

Protected Overrides Sub OnLoad(e As System.EventArgs) 
    If IsCrossPagePostBack Then Exit Sub 
    ... 
    Common code 
    ... 
    MyBase.OnLoad(e) 
End Sub 

End Class 

Page1.vb.aspx:

Public Class _Page1 
    Inherits BasePage 

Private Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load 
    ... 
    Page1 specific code 
    ... 
End Sub 

End Class 

Page2.vb.aspx:

Public Class _Page2 
    Inherits BasePage 

Private Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load 
    ... 
    Page2 specific code 
    ... 
End Sub 

End Class 

В Page1.aspx У меня есть ASP LinkButton с PostBackUrl, установленным в Page2.aspx. Я установил точки останова в OnPreInit, OnInit и OnLoad в BasePage.vb. Когда LinkButton нажимается в Page1.aspx, все 3-страничные события срабатывают для Page1.aspx - IsCrossPagePostBack = True, что я и ожидаю для исходной страницы. Затем все 3-страничные события срабатывают для Page2.aspx и IsCrossPagePostback = False, что снова ожидается.

Я бы ожидал, что обе страницы будут сделаны, чтобы запустить эти события на этой странице. Я даже вижу, что Page2.aspx визуализировался и отображается в моем браузере, но по какой-то причине страницы страницы страницы страницы_1.aspx снова запущены, и на этот раз IsCrossPagePostback = False, что позволяет запускать нежелательный код для исходной страницы.

Если вы не устанавливали точки останова и не отлаживали этот код, вы никогда не узнаете, что это происходит. Никаких заметных побочных эффектов от этого не происходит, за исключением того, что он обрабатывает время обработки, и я ЗНАЮ, что это неправильно. Я просто не могу определить, что заставляет page1.aspx загружаться снова после загрузки Page2.aspx.

В окне «Мой стек вызовов» нет вызывающего абонента, только одна строка содержит текущий Sub (OnPreInit, OnInit или OnLoad).

Я проследил код шаг за шагом. Я догадался, что Page2.aspx полностью загружен, а затем снова вернется в событие страницы для page1.aspx.

У меня также есть элемент управления LinkButton в Page2.aspx, у которого есть свой PostBackUrl, установленный для Page1.aspx - пока у вас нет этой проблемы.

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

EDIT:

После всей ночи отладки и исследования, я определил, что моя происходящий CrossPagePostback проблема заключается в том, была вызвана теге IMG с отсутствующим изображением. Это большая проблема для меня, поскольку IMG SRC = URL-адрес поступает из данных, полученных в ответе REST, на которые я не контролирую.

Ответ REST содержит большое количество данных, некоторые из которых являются URL-адресами изображений, относящихся к продукту. Изображения необходимы для информации о странице. Есть миллионы продуктов, и просто случается, что я заметил эту проблему на продукте, у которого отсутствуют изображения. 99,99% всех продуктов имеют действительные URL-адреса для изображений, поэтому это не будет общей проблемой.

Однако, я действительно не хочу, чтобы моя исходная страница загружалась дважды, и я хотел бы остановить ее.Является ли это ошибкой, что исходная страница в сценарии CrossPagePostback будет загружаться дважды, если IMG SRC = нарушена на целевой странице? Есть ли исправление?

Собираюсь сделать еще несколько исследований, но подумал, что сразу опубликую вопрос о моем вопросе. Кто-нибудь знает решение/исправить? Я прочитал аналогичные сообщения здесь, в SO, что отсутствующее изображение src приведет к загрузке исходной страницы CrossPagePostback дважды. Ответ всегда кажется правильным либо URL-адрес src, либо сделать изображение доступным, чтобы этого не произошло. К сожалению, у меня нет ни одного из этих параметров - img SRC абсолютно корректен, как указано в полученном ответе REST, и изображение не мое, оно должно быть на удаленном сервере, как указано в ответе REST.

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

ответ

0

После того, как была проведена отладка и исследование, я решил, что моя исходная проблема CrossPagePostback на самом деле вызвана тегом IMG с отсутствующим изображением. Это большая проблема для меня, поскольку IMG SRC = URL-адрес поступает из данных, полученных в ответе REST, на которые я не контролирую.

Ответ REST содержит большое количество данных, некоторые из которых являются URL-адресами изображений, относящихся к продукту. Изображения необходимы для информации о странице. Есть миллионы продуктов, и просто случается, что я заметил эту проблему на продукте, у которого отсутствуют изображения. 99,99% всех продуктов имеют действительные URL-адреса для изображений, поэтому это не будет общей проблемой.

Однако, я действительно не хочу, чтобы моя исходная страница загружалась дважды, и я хотел бы остановить ее. Является ли это ошибкой, что исходная страница в сценарии CrossPagePostback будет загружаться дважды, если IMG SRC = нарушена на целевой странице? Есть ли исправление?

Собираюсь сделать еще несколько исследований, но подумал, что сразу опубликую вопрос о моем вопросе. Кто-нибудь знает решение/исправить?

Спасибо.

+1

Поздравляем с прогрессом. Если вы считаете, что закрыли эту проблему и определили новую проблему, пожалуйста, откройте новый вопрос и отметьте лучший ответ как «принятый» (даже если это ваш собственный ответ). Однако, если вы чувствуете, что ваш прогресс не полностью закрыл эту проблему, используйте функцию «Изменить», чтобы добавить дополнительную информацию в свой вопрос вместо публикации в качестве ответа. Приветствия ~ –

Смежные вопросы