Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > page_load загружается дважды


Автор: RobinHoodPHD 16.8.2011, 21:47
Доброго времени суток!

Столкнулся с такой проблемой - Page_load отрабатывает дважды: т.е. если поставить на ней точку останова, то она вызовется дважды при обращении к странице. Тестирую на девелоперском сервере (тот что встроен в 2010 студию).

Первым делом я отрубил AutoEventWireup причем как на самой странице, так и на мастер странице. - Не помогло.
Гугл и форумы говорят 5 вещей:

0. Так и должно быть - учи матчасть. (имхо полный бред)
1. Отключи AutoEventWireup. (отключил - не помогло)
2. Это из-за того что запускаешь на девелоперском сервере (хорошо если так, но хотелось бы знать точно)
3. Все из за какого-нибудь контрола типа Gridа (нифига, страница пустая вообще)
4. Из-за того, что некоторые ресурсы не были найдены (АГА!)

Вот 4 как раз и помогло. В мастер-пэйдже был контрол с картинкой с пустым свойством src. Как только я подсунул туда существующую картинку и еще добавил иконку сайта "favicon.ico"  - page_load начал вызываться один раз. 

Внимание! Вопрос:
Получается, что если вдруг каким-то чудом не найдется какой-нибудь ресурс при запросе (а это имхо может быть запросто при реальной работе веб-приложения) то страница начнет грузится дважды - дважды подгрузятся скрипты, дважды пройдет обращение к базе - результат: ошибки, скорость падает.
Есть ли способ решить эту проблему так, чтобы даже при отсутствии какого либо ресурса page_load отрабатывал один раз???

Спасибо за Ваши ответы.

PS:
-- Прошло часа 3 и я дописал сюда вот это:
Я добавил пользовательский контрол на страницу и все опять стало плохо - страница стала опять грузится два раза не смотря ни на какие там src и favicon.ico.
Убив еще три часа, пришел к выводу, что в принципе двойная загрузка page_load мне не мешает (кроме того что это мне непонятно) Основная проблема в том, что у меня дважды вызывается клиентская функция, привязанная к $('document').ready. Вот это в мое сознание вообще никак не влезает - ладно на сервере дважды вызвалась процедура, но почему браузер дважды запустил событие загрузки страницы?
При этом я успешно избавился от этого таким вот извращенным образом:
Код

var trick;
$(document).ready(
    function () {
        if (typeof (trick) !== 'undefined' && trick != null) {
            trick += 1
        }
        else trick = 1

        if (trick > 1) return; // При повторной загрузке здесь будет значение 2
}
);



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)