1

動的調査の作成を検討しています。データベースからすべての質問コントロールを生成する場所。以下は、私がやろうとしていることの例です(データベース部分なし)。以下に示すように、質問を表示できます。ユーザー入力を読み取ることができません。

誰にもアイデアはありますか。

ビューステートを調べましたが、機能していないようです。

Post Back によってページがリロードされると、コントロールはなくなります。考えられるすべてのイベントを調べましたが、ページにコントロールはありません。Page_Load イベントでそれらを再度作成するまで。

動的に作成されたコントロールのユーザー入力の値を見つけるには、どこを見ればよいですか?

ページ

<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)
    {

    }
}
4

2 に答える 2

1

一意の ID を持つコントロールを生成する必要があります。データベース内の正確に 1 つの質問で各コントロール ID を計算できる必要があります。これを行った後、特定の質問に対する回答をデータベースに書き戻すことができます。

于 2009-03-15T16:50:45.207 に答える
1

編集: OnInit 関数でコントロールを作成します (Init イベント中)。このページをチェックしてください。

'rb' または 'tb' 変数をクラススコープにしてみてください。または、少なくとも、作成されたコントロールへの参照をリスト (または配列) に格納し、必要なときにそれを介してそれらにアクセスしようとします。

コントロールは OnInit 関数で作成するため、ビューステートをロードする前に作成されます。ビュー ステートが読み込まれると、ユーザーが投稿した値がビュー ステートからコントロールに復元されるため、コードからアクセスできます。コントロールへの参照を保持する必要があるだけです。

于 2009-03-15T16:53:30.753 に答える