2009-06-03 5 views
0

Возможно ли выполнить обратную передачу и отобразить ли вид просмотра выбранное значение в следующем коде?Динамические элементы управления в asp.net

Кажется, placeholder1.controls.clear() удаляет его.

protected void Page_Load(object sender, EventArgs e) 
{ 
    bind(); 
} 
protected void bind() 
{ 
    PlaceHolder1.Controls.Clear();   
    DropDownList ddl = new DropDownList() { AutoPostBack = true, ID="ddl" }; 
    ddl.SelectedIndexChanged += new EventHandler(ddl_SelectedIndexChanged); 
    ddl.Items.Add("hi"); 
    ddl.Items.Add("bye"); 
    PlaceHolder1.Controls.Add(ddl); 
} 
void ddl_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    bind(); 
} 
+0

Пробовал добавлять его в Page_Init, не работал. – maxp

ответ

0

Почему бы не просто скрыть PlaceHolder, установив Visible to false? Кроме того, см. Truly Understanding Dynamic Controls, чтобы получить голову, когда вам нужно динамически вводить материал, поскольку динамические элементы управления далеки от простого.

1

Попробуйте удалить метод PlaceHolder1.Controls.Clear();,

и переместить Bind() вызов из Page_Load и в OnInit

вы собираетесь запустить в жизнь Проблемы цикла, как вы делаете вещи там нагрузки viewstate & код события будет происходить до того, как вы заново создадите элементы управления.

+0

Удаление placeholder1.controls.clear() будет означать, что при попытке создать элемент управления с тем же идентификатором дважды появится ошибка. – maxp

+0

нет, этого не будет. Элементы управления динамически воссоздаются при каждой последующей обратной передаче. PlaceHolder1.Controls не содержит ничего в первую очередь. попробуйте –

+0

Я интерпретировал ваше сообщение как движущееся Bind(); от Page_Load (o, e) до Page_Init (o, e). После того, как ddl вызовет postbackould, Page_Init() запустит Bind() ;, тогда будет выбрано SelectedIndexChanged(), заставив Bind() снова запустить(); Поэтому возникновение исключения с двумя элементами управления как в placeholder1 с тем же идентификатором. Я неверно истолковал ваш «OnInit?»? – maxp

1

Попробуйте вызвать bind() из Page_Init().

ViewState загружается после Page_Init(), но до Page_Load(), поэтому, когда вы вызываете bind() из Page_Load(), вы вызываете его после того, как .NET попытался и не смог установить выбранное значение вашего DropDownList.

1

Возможно ли, чтобы в видовом экране было отображено выбранное значение ...?

ViewState данные восстанавливаются на постбэк до события загрузки. Если вы хотите, чтобы ViewState запомнил что-нибудь для элемента управления, этот элемент управления должен также существует на странице перед событием загрузки.

Я подозреваю, что часть вашей проблемы заключается в том, что вы заново создаете свой элемент управления dropdownlist при его изменении, но нигде в этом коде вы не устанавливаете выбранный индекс, и поэтому вы уничтожаете его каждый раз, когда вы его устанавливаете.

Смежные вопросы