Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
События динамических контролов
|
|||
|---|---|---|---|
|
#18+
Всем привет. Нужна помощь в следующей проблеме: на aspx-странице есть кнопка (Button1), по на жатии на которкю вызывается обработчик_события_Сlick, который добавляет на страницу динамически-создаваемые контролы (CheckBox). при добавлении этих контролов я подписываю их событие CheckedChanged к обработчику_события_onCheck и ставлю autopostback=true. Проблема в том, что при вызове события CheckedChanged (нажатие на флажок чекбокса) делается рефреш страницы, а обработчик не срабатывает и динамически-созданные чекбоксы опять исчезают. Вопрос: как сделать так чтобы срабатывал обработчик события этих динамических чекбоксов. Заранее спасибо! код: public partial class admin_test : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void draw() { CheckBox newCB; newCB = new CheckBox(); newCB.InputAttributes.Add("value", "somevalue"); newCB.AutoPostBack = true; newCB.Text = "unchecked"; newCB.CheckedChanged += new EventHandler(onCheck); form1.Controls.Add(newCB); } protected void onCheck(object sender, EventArgs e) { CheckBox cbx = (CheckBox)sender; cbx.Text = "checked"; } protected void Button1_Click(object sender, EventArgs e) { draw(); } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2006, 18:37 |
|
||
|
События динамических контролов
|
|||
|---|---|---|---|
|
#18+
Насколько я понимаю то, что вы пытаетесь сделать сделать нельзя. Причина? Вы создаете динамические объекты в момент, когда ViewState для страницы уже создана. Т.е. - при PostBack-e только то, что находится во ViewState коллекции будет пересоздано. Чтобы то, что вы хотите сделать работало так, как вам нужно, нужно добавлять объекты динамически в событиях Page_Load или OnInit()/InitializeComponent(). Только при данных условиях динамически созданные контроллы будут пересоздаваться автоматически с сохранением событий и значений. В остальных случаях вам придется заниматься мазохизмом и создавать что то наподобие АСП-эшного ViewState-a. Или создать заранее контроллы, сделать их невидимыми и активизировать их при нажатии какой то кнопки. Но в этом случае вам заранее надо знать, сколько контролов вы будете "создавать динамически" :-). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2006, 19:54 |
|
||
|
События динамических контролов
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Romashkin, Вы писали: R>Проблема в том, что при вызове события CheckedChanged (нажатие на флажок чекбокса) делается рефреш страницы, а обработчик не срабатывает и динамически-созданные чекбоксы опять исчезают. Проблема в том, что при рефреше контролов, события которых должны были сработать, просто нет. Ты ведь их не добавил. R>Вопрос: как сделать так чтобы срабатывал обработчик события этих динамических чекбоксов. Запоминай (как думай сам), какие контролы ты насоздавал, и при рефреше создавай их заново.... << RSDN@Home 1.2.0 alpha rev. 668>> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2006, 20:26 |
|
||
|
События динамических контролов
|
|||
|---|---|---|---|
|
#18+
Спасибо, RustM. RM>Запоминай (как думай сам), какие контролы ты насоздавал, и при рефреше создавай их заново. а какие способы запоминания существуют? просто чекбоксы генерируются на основе данных базы данных, и не хочется каждый раз на Page_Load подключаться к базе данных зря.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2006, 21:30 |
|
||
|
События динамических контролов
|
|||
|---|---|---|---|
|
#18+
RomashkinСпасибо, RustM. RM>Запоминай (как думай сам), какие контролы ты насоздавал, и при рефреше создавай их заново. а какие способы запоминания существуют? просто чекбоксы генерируются на основе данных базы данных, и не хочется каждый раз на Page_Load подключаться к базе данных зря.. Session? Cache? Application? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2006, 21:59 |
|
||
|
События динамических контролов
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Romashkin, Вы писали: R>Спасибо, RustM. RM>>Запоминай (как думай сам), какие контролы ты насоздавал, и при рефреше создавай их заново. R>а какие способы запоминания существуют? просто чекбоксы генерируются на основе данных базы данных, и не хочется каждый раз на Page_Load подключаться к базе данных зря.. Можно создать, например, массив в котором хранить ID из базы и положить в стэйт (State). А в Page_Load брать из стэйта и формировать контролы, при этом коннектится к базы не надо. Можно создать ArrayList и хранить объекты со всеми нужными данными для добавления чекбокса (ID, label, etc) в стэйте. Тут широкое поле для творчества и деятельности. Подробнее про стэйты в ASP.Net в MSDN здесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2006, 11:31 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=34155538&tid=1387235]: |
0ms |
get settings: |
4ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
26ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 297ms |

| 0 / 0 |
