PostBack на странице приводит к долгому переходу к page_init на новой странице с использованием URL-адреса диаграммы

У меня есть программа С# ASP.NET, которая загружает страницу b.aspx более 1 минуты при нажатии на диаграмму на странице a.aspx, которая открывает b.aspx.

Я думал, что это могут быть мои запросы в b.apsx, но оказалось, что они выполняются очень быстро. Внося некоторые записи в мой код, я вижу, что с момента создания экземпляра страницы/класса в b.aspx до момента, когда он попадает в Page_init, проходит 52 секунды. Похоже, что a.aspx, загрузка которого занимает 52 секунды, выполняет обратную передачу и загружается снова, прежде чем я смогу добраться до b.aspx.

Я установил следующее в своей диаграмме в a.aspx.

Chart.Series[series].LegendPostBackValue = "SomeValue";
Chart.Series[series].LegendUrl = url;

В Chart_Click() я установил значение сеанса, чтобы я мог сослаться на него в b.aspx.

HttpContext.Current.Session["value"] = e.PostBackValue;

В b.aspx я получаю доступ к данным, используя

String somevariable = HttpContext.Current.Session["value"].ToString();

person John Wesley Gordon    schedule 16.01.2014    source источник
comment
Есть ли у вас какие-либо неотображаемые исключения в файле журнала приложений? Есть ли у вас какая-либо пользовательская программа, настроенная для регистрации ошибок в текстовом файле, например?   -  person cubitouch    schedule 16.01.2014
comment
Какая функция вызывается перед Page_init, Page_Load? Вы отладили?   -  person Tianyun Ling    schedule 16.01.2014
comment
Насколько я ничего не знаю до page_init. Вот интересную вещь я замечаю. У меня есть страница a.aspx. Загрузка данных на него занимает 52 секунды. При нажатии на диаграмму в a.aspx открывается вкладка b.aspx, которая представляет собой страницу, для достижения которой требуется 52 секунды, page_init. Похоже, что b.aspx не начинает открываться до тех пор, пока a.aspx полностью не перезагрузится. Если я поставлю if(!isPostback) в a.aspx, чтобы он больше не загружался после нажатия, b.aspx загружается менее чем за 2 секунды. Проблема в том, что я получаю пустой экран на a.aspx, что неприемлемо. Я хочу посмотреть, что там было до того, как я нажал на это.   -  person John Wesley Gordon    schedule 17.01.2014


Ответы (1)


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

a.aspx, страница, на которую щелкнули, чтобы перейти к b.aspx, имела набор LegendPostBackValue. Это приведет к тому, что перезагрузка ASPX займет дополнительные 52 секунды. Удаление

Chart.Series[series].LegendPostBackValue = "SomeValue";

и удаление установки значения сеанса в Chart_Click

HttpContext.Current.Session["value"] = e.PostBackValue;

и вместо этого используя

Chart.Series[series].LegendUrl = url + "?value="SomeValue";

и на странице использовать b.apsx

String somevariable = HttpContext.Current.Request.QueryString["value"];

вместо

String somevariable = HttpContext.Current.Session["value"].ToString();

исправил проблему. Страница a.aspx не должна перезагружаться, так как не имеет значения обратной передачи и вместо этого следует URL-адресу b.aspx.

person John Wesley Gordon    schedule 28.03.2014
comment
-1 за предоставление ответа вряд ли поможет кому-то еще. Эта конкретная вещь, возможно, помогла в вашей конкретной проблеме, но она не дает четкого понимания того, почему страница может занять много времени, чтобы достичь init. - person Adrian Zanescu; 28.03.2014
comment
Я думаю, что урок, который нужно усвоить, заключается в том, что если вы отправляете данные PostBack на страницу, ожидается, что эта страница перезагрузится. Я показывал, что есть лучший способ обрабатывать открывающие ссылки из диаграмм, которые не будут выполнять обратную передачу, используя вместо этого URL-адрес для передачи значения через GET. @AZ, не могли бы вы придумать, как я могу отредактировать, чтобы сделать его более полезным? - person John Wesley Gordon; 28.03.2014
comment
здесь у вас тоже есть варианты: 1. перефразируйте заголовок вашего вопроса (и тело) и дайте понять, что речь идет о перенаправлениях между страницами, а не просто об инициализации страницы. 2. дайте другой ответ, который действительно отвечает на поставленный вопрос, или закройте свой вопрос. - person Adrian Zanescu; 28.03.2014
comment
в его текущей форме у вас есть вопрос о том, почему Init может занять много времени, чтобы достичь определенной страницы с ответом, который говорит о обратных передачах на другой странице. Я понимаю, что они связаны в вашем конкретном случае, но для всех, кто наткнулся на это... Представьте, что вы гуглите по вопросу page_Init и добираетесь до этого. Будет ли это иметь какой-либо смысл или ценность? - person Adrian Zanescu; 28.03.2014