Получить пользовательский ввод от динамического управления - PullRequest
1 голос
/ 15 марта 2009

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

У кого-нибудь есть идеи?

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

Когда страница перезагружается через Post Back, элементы управления исчезают. Я посмотрел на каждое событие, которое могу придумать, и на странице нет элементов управления. Пока я не создам их снова в событии 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)
    {

    }
}

Ответы [ 2 ]

1 голос
/ 15 марта 2009

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

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

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

1 голос
/ 15 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...