2009-03-15 6 views
1

Я ищу для создания динамического обзора. Где я создаю все элементы управления запросами из базы данных. Ниже приведен пример того, что я пытаюсь сделать (без части базы данных). Я могу отображать вопросы, как показано ниже. Я не могу прочитать ввод пользователей.Получить пользовательский ввод из динамических элементов управления

Есть ли у кого-нибудь идеи.

Я посмотрел в viewstate, но я не могу заставить его работать.

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

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

Page

<body> 
    <form id="form1" runat="server"> 
    <div> 

    </div> 
    </form> 
</body> 

Код файла

 protected override void OnPreLoad(EventArgs e) 
{ 
    base.OnPreLoad(e); 
    foreach (Control item in form1.Controls) 
    { } 
} 

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    foreach (Control item in form1.Controls) 
    { } 
} 
protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 
    foreach (Control item in form1.Controls) 
    { } 
} 

protected override void OnSaveStateComplete(EventArgs e) 
{ 
    base.OnSaveStateComplete(e); 
    foreach (Control item in form1.Controls) 
    { } 
} 
protected override void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    foreach (Control item in form1.Controls) 
    { } 
} 
protected void Page_Load(object sender, EventArgs e) 
{ 
    RadioButton rb; 
    rb = new RadioButton(); 
    rb.ID = "rb_1"; 
    rb.Text = "yes"; 
    rb.GroupName = "question"; 
    form1.Controls.Add(rb); 

    rb = new RadioButton(); 
    rb.ID = "rb_2"; 
    rb.Text = "no"; 
    rb.GroupName = "question"; 
    form1.Controls.Add(rb); 

    rb = new RadioButton(); 
    rb.ID = "rb_3"; 
    rb.Text = "other"; 
    rb.GroupName = "question"; 
    form1.Controls.Add(rb); 

    TextBox tb = new TextBox(); 
    form1.Controls.Add(tb); 

    Button btn = new Button(); 
    btn.Text = "Save"; 
    form1.Controls.Add(btn); 

    foreach (Control item in form1.Controls) 
    { 

    } 
} 

ответ

1

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

1

Редактировать: создать элементы управления в функции OnInit (во время события Init). Проверьте this page.

Попробуйте сделать переменные класса «rb» или «tb» классом. Или, по крайней мере, сохранить ссылку на созданные элементы управления в списке (или массиве), а затем попытаться получить к ним доступ, когда захотите.

Поскольку вы создаете элемент управления в функции OnInit, они создаются перед загрузкой состояния просмотра. Таким образом, когда состояние представления загружается, значения, отправленные пользователем, восстанавливаются из состояния представления в элемент управления и, следовательно, вы можете получить к нему доступ из вашего кода. Вам просто нужно сохранить ссылку на элементы управления.