![]() |
|
Модераторы: gambit |
![]()
|
|
| Nicopol2 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 13.7.2007 Репутация: нет Всего: нет |
Здравствуйте. Может ли кто нибудь мне объяснить почему когда создаешь контрол не в конструкторе класса - событие не срабатывает
- (Class1 - генерируемыу контрол) а если поместить этот код в конструктор:
- все отлично работает. В чем дело??????????????????????? Но создавать контрол в конструкторе - это слишком рановато! |
||||
|
|||||
| Mymik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1474 Регистрация: 12.5.2006 Где: Lamer-центер Репутация: 50 Всего: 78 |
Nicopol2, когда приходит событие обратно, то страница генерируется по новой и динамические контролы на подобии твоего не хранятся в структуре данной страницы. И потому все они собираются по новой. И наверняка ты не вызываешь создание всех этих контролов если IsPostBack == true.
-------------------- |
|||
|
||||
| SpaceSpace |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 10.4.2007 Где: Самара Репутация: 3 Всего: 10 |
Да.
Довольно распространенная ошибка с динамическим созданием контролов или ,например, привязкой данных. Дело в том (повторяю слова Mymik), что серверный код отрабатывает каждый раз при обращении к нему, поэтому он (код, серверный объект) должен быть в курсе первый или непревый раз к небу обращается один и тот же пользователь. Для этого предусмотрено свойство IsPostBack, которым ты как раз должен проверить эту ситуацию. Получается следующее. Первый запуск страницы: обращение к серверу, запрос серверной страницы. в каком-либо методе у тебя генерятся динамические контролы. страница в HTML(рендериться) приходит к клиенту Ты кликаеш на кнопку. Сам факт кликания сохранияется в скрытом поле и отправляется на сервер Вот тут логично должно обработаться событие, но.. происходит следующее : серверный объект думает что это не второе, а первое обращение к странице и заново создает контрол, соответсвенно кликнул ты или не кликнул - ему всё-равно. а вот если бы ты учитывал сей факт, то всё бы хорошо работало -------------------- Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение. 70-565 MCPD Enterprise 3.5 |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
||||
|
||||
| tol05 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 34 Всего: 170 |
Nicopol2, этот вопрос уже обсуждался посмотри здесь
ну а если вкратце, то: - ты делаешь правильно, нужно переопределять CreateChildControls(). Но ведь его нужно где-то и вызывать, правда? А где ты его вызываешь? Нигде. Надеешься, что базовый класс Control сам вызовет? Нет, не вызовет. Нужно еще задействовать метод EnsureChildControls() и свойство ChildControlsCreated. Свойство ChildControlsCreated говорит о том, созданы ли дочерние контролы или нет, а метод EnsureChildControls() просто проверяет это свойство и если дочерние контролы не созданы - вызывает как раз твой метод CreateChildControls().
Поставь в конструкторе
а там, где тебе это нужно (обычно - в свойствах контрола или в OnLoad контрола) - вызов EnsureChildControls(). Ну и, конечно, переделай сам CreateChildControls()
должно работать... Если ты не забудешь вызвать EnsureChildControls(), конечно Ну все, теперь можно и в отпуск.... -------------------- На хорошей работе и сны хорошие снятся. |
||||||
|
|||||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка под ASP.NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |