Элементы Dropbox динамически созданного пользовательского элемента управления из базы данных сбрасываются при обратной передаче

Во-первых, мне удалось создать веб-приложение, в котором мои динамически созданные пользовательские элементы управления воссоздаются и повторно заполняются правильной информацией при обратной передаче. Я не уверен, в чем моя проблема, но я надеюсь, что вы сможете помочь мне понять это, исходя из моей ситуации:

На моей странице я ввожу количество создаваемых элементов управления в жестко закодированное текстовое поле (это на странице aspx) и нажимаю кнопку «ОК». Это, в свою очередь, создает указанное количество пользовательских элементов управления динамически с использованием C# в фоновом режиме.

Пока желаемое количество динамических элементов управления находится в таблице на странице. Следующий...

У меня есть 1 текстовое поле и 4 раскрывающихся ящика на каждом динамическом пользовательском элементе управления. Когда я ввожу название компании в поле текстового поля и нажимаю ввод или щелкаю (в событии с измененным текстом), оно автоматически отправляет обратно, а текстовое поле сохраняет название компании, которое я ввел.

На основе этой строки выпадающие ящики заполняются из базы данных. Теперь, когда я выбираю нужные элементы из дропбоксов и нажимаю кнопку «Сохранить» (расположенную за пределами динамических элементов управления на странице), он делает вставку в базу данных, но оказывается, что после этой обратной передачи индексы из дропбоксов имеют были сброшены и вставлены неправильные значения.

На следующих картинках сначала показано, как должно быть, а потом как есть.

В основном название компании остается в текстовом поле динамического элемента управления, но информация, которую я выбираю из раскрывающегося списка, сбрасывается до первого индекса.

Как должно быть

Как это есть на самом деле


person Alen    schedule 23.01.2013    source источник


Ответы (2)


Без кода сложно сказать, что произошло, но это распространенная ошибка:

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

person BBQ    schedule 23.01.2013
comment
Я действительно не знаю, в чем проблема, поэтому я подумал, что нецелесообразно публиковать ВЕСЬ мой код как с моих страниц aspx.cs, так и с моих страниц ascx: P Вы имеете в виду, что я должен поместить это в событие Page_Load страницы ASCX или page_load страницы страница ASPX.CS? потому что на моей странице aspx.cs у меня есть это, но на странице ascx событие загрузки страницы пусто... - person Alen; 23.01.2013
comment
думаю, подойдет только событие загрузки страницы aspx.cs и обработчик событий для кнопки в aspx.cs;) - person BBQ; 23.01.2013

Если вы динамически создаете элементы управления, обязательно сделайте это в событии Page_Init. Динамические элементы управления должны создаваться заново при каждой обратной передаче. Их состояние восстанавливается после Page_Init (если это обратная передача), поэтому не забудьте установить их значения только в Page_Load, если вы хотите перезаписать их.

person Destrictor    schedule 23.01.2013