2009-03-15 17 views
1

私はダイナミックアンケートを作成したいと考えています。データベースからすべての質問コントロールを生成する場所。以下は私がやろうとしていることの例です(データベース部分なし)。私は以下のように質問を表示することができます。私はユーザーの入力を読み取ることができません。ダイナミックコントロールからユーザー入力を取得

誰にも考えがありますか?

私はviewstateを調べましたが、動作させることができません。

ポストバックでページをリロードすると、コントロールが消えます。私は考えることができるすべてのイベントを見てきました。ページにコントロールがありません。私が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) 
    { 

    } 
} 

答えて

1

あなたはユニークなIDを持つコントロールを生成する必要があります。あなたはデータベース内のちょうど1つの質問で各制御IDを数学的に計算できる必要があります。これを実行すると、特定の質問に対する回答をデータベースに書き戻すことができます。

1

編集:(Initイベント中に)OnInit関数でコントロールを作成します。 this pageを確認してください。

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

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

関連する問題