2009-04-15 2 views
0

Я читал о создании динамического управления в ASP.NET этот кусок текста:Динамический контроль создание

... При использовании динамического контроля, вы должны помнить, что они не будут существовать только до следующего постбэка , ASP.NET не воссоздает динамически добавленный элемент управления . Если вам нужно повторно создать элемент управления несколько раз, вы должны выполнить создание элемента управления в обработчике событий Page .Load . У этого есть дополнительное преимущество , позволяющее вам использовать состояние просмотра с вашим динамическим управлением . Даже если посмотреть состояние обычно восстанавливается до события Page.Load , если вы создаете элемент управления в обработчике события Page.Load, ASP.NET будет применяться любому состоянию информации, которую он имеет после Обработчик события. Этот процесс является автоматическим ...

Я хотел бы попробовать это на примере создать кнопку декларативно -

<asp:Button ID="Button1" runat="server" Text="Button" 
      onclick="Button1_Click" /> 

и динамически за кодовыми 5 флажков -

protected void Page_Load(object sender, EventArgs e) 
{ 
    for (int i = 0; i <= 5; i++) 
    { 
     var chBox = new HtmlInputCheckBox(); 
     Controls.Add(chBox); 
    } 

} 

Но когда я проверяю некоторые флажки и нажимаю кнопку, после обратной передачи все флажки состояния стираются. Это означает, что ASP.NET не управляет состояниями представления динамических элементов управления автоматически? Я попытался включить состояние просмотра для каждого из флажков и для всей страницы, , но это не работает. Может кто-нибудь объяснить: 1. Почему это так? 2. Как этого избежать?

+0

Hi. См. Обновленный код в моем комментарии, надеюсь, что он сработает. Если нет, напишите мне комментарий, и я посмотрю, смогу ли я помочь. – Kirtan

ответ

0

Элементы управления могут быть созданы на странице_Инте.

protected void Page_Init(object sender, EventArguments e) 
{ 
    //Generate the checkboxes dynamically here. 
    CheckBox c; 
    for (int i = 0; i < 5; i++) { 
    c = new CheckBox(); 
    c.ID = "Checkbox" + i.ToString(); 

    divContainer.Controls.Add(c); //create a div with runat="Server" attribute or use an asp:Panel, etc. container controls. 
    } 
} 

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

+0

я сделал это, как вы и Андрей Заяц сказали, но без изменений, могу я опубликуйте мой aspx где-то здесь? – ge1serf

+0

спасибо за подсказку divContainer! – ge1serf

2

Причина, по которой это происходит, заключается в том, что для восстановления POSTED-значений ASP.NET эти элементы управления должны быть частью страницы перед загрузкой. Чтобы выполнить эту работу, вам необходимо (если возможно) создать свои элементы управления OnInit страницы.

+0

private void Page_Init (отправитель объекта, система.EventArgs e) { for (int i = 0; i <= 5; i ++) { var chBox = new HtmlInputCheckBox(); Controls.Add (chBox); }} без изменений :( – ge1serf

+0

Как OP цитировали, это будет работать уже для элементов управления, созданных в PageLoad –

+0

Я попытался установить ID в обоих методах – ge1serf

0

Необходимо установить идентификатор для каждого динамического элемента управления, чтобы их можно было синхронизировать по обратной стороне.

0

Как я понимаю - есть независимо от того, где для создания элементов управления в OnInit или OnLoad (но некоторые книги предлагают в OnLoad), дела в том, где разместить их - если вы размещаете через Controls.Add - это поместите их из <form></form>, поэтому postback не принимает состояния управления. после создания заполнителя внутри <form></form> и добавления динамических элементов управления к этому заполнительу, когда-либо начинающему работать нормально.

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