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


Автор: Idsa 20.12.2007, 16:47
У меня на страничке лежит контрол, от которого я получаю определенный объект в OnLoad (позже нельзя, т. к. это нужно сделать до обработки событий RaiseChangedEvents и RaisePostBackEvents). В свою очередь этот объект принимает нужный мне вид только в событии OnLoad контрола. Подскажите, как можно выйти из этой ситуации, ибо в OnLoad'е страницы объект все еще равен null :(

Автор: tol05 20.12.2007, 17:52
Вопрос непонятен. 
Цитата(Idsa @  20.12.2007,  15:47 Найти цитируемый пост)
У меня на страничке лежит контрол, от которого я получаю определенный объект в OnLoad

В OnLoad страницы или контрола?

Load генерируется сначала для страницы, а потом - для ее контролов... Можно написать метод страницы, который подписать на Load контрола. И в нем делать то, что тебе нужно..

А еще лучше подписаться на событие LoadComplete страницы - как раз ее Load и Load контролов закончился.

Автор: Idsa 21.12.2007, 00:56
Цитата(tol05 @  20.12.2007,  17:52 Найти цитируемый пост)
А еще лучше подписаться на событие LoadComplete страницы - как раз ее Load и Load контролов закончился. 

В LoadComplete уже пройдут вызовы RaiseChangedEvents и RaisePostBackEvents :(

Цитата(tol05 @  20.12.2007,  17:52 Найти цитируемый пост)
Можно написать метод страницы, который подписать на Load контрола. 

А вот это, похоже, то, что нужно.
Только вот, если я подпишусь на Load контрола из страницы, мой код вызовется после Load самого контрола? Просто, насколько я помню, когда к событию подписано несколько методов, порядок их вызова не определен. Или я ошибаюсь?

Автор: tol05 21.12.2007, 10:53
Можно так:
введи поле-делегат в контрол. На странице - передавай метод страницы делегату. В контроле, перед сымым выходом из OnLoad, вызывай делегат.

Т.о. последовательность такая будет

OnLoad страницы стартует
    OnLoad контрола стартует
    ...
    Контрол вызывает делегат
    OnLoad контрола закончен
OnLoad страницы закончен.

Автор: Idsa 21.12.2007, 13:48
tol05, идея интересная. Только вот универсальностью и не пахнет :(

Автор: tol05 21.12.2007, 14:07
в смысле? Какая универсальность? У тебя тоже ситуация не универсальна...

К тому же мне непонятно почему:
- в класс контрола можно добавлять члены как поля (я имею в виду, что страница, юзер-контрол - это такие же C# классы, как и классы консольных приложений) через добавление на страницу кнопок и гридов
- но нельзя добавлять члены класса - делегаты, события и т.п.

???

Все в твоих руках, чем хочешь, тем и   работаешь.

Можно сделать событие контрола, которое он будет возбуждать сразу после окончания работы с твоими данными, в своем OnLoad.. А на странице подпосаться на это событие. Ничем не будет отличаться от какого-нибудь
Код

    protected void Button1_Click(object sender, EventArgs e)


ну а впрочем, смотри сам. Хозяин-барин. 

Автор: Idsa 21.12.2007, 14:57
Пожалуй, соглашусь.
Спасибо за помощь. +1.

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