2009-03-15 4 views
1

Ich möchte eine dynamische Umfrage erstellen. Wo ich alle Fragenkontrollen von der Datenbank generiere. Unten ist ein Beispiel für das, was ich versuche (ohne den Datenbank-Teil). Ich kann Fragen wie unten gezeigt anzeigen. Ich kann die Benutzereingabe nicht lesen.Benutzereingaben von dynamischen Steuerelementen abrufen

Hat jemand irgendwelche Ideen.

Ich habe in den Viewstate geschaut, aber ich kann nicht scheinen, damit es funktioniert.

Wenn die Seite durch einen Post-Back neu geladen wird, sind die Steuerelemente verschwunden. Ich habe mir jedes erdenkliche Ereignis angeschaut und es gibt keine Kontrollen auf der Seite. Bis ich sie beim Ereignis Page Load erneut erstellt habe.

Woher soll ich den Wert der Benutzereingabe für dynamisch erstellte Steuerelemente ermitteln?

Seite

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

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

-Code Datei

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

    } 
} 

Antwort

1

Sie haben die Kontrollen mit einer eindeutigen Kennung zu generieren. Sie müssen in der Lage sein, jede Steuerelement-ID mit genau einer Frage in Ihrer Datenbank zu berechnen. Danach können Sie die Antwort auf eine bestimmte Frage in eine Datenbank zurückschreiben.

1

Bearbeiten: Erstellen Sie die Steuerelemente in der OnInit-Funktion (während des Init-Ereignisses). Überprüfen Sie this page.

Versuchen Sie, 'rb' oder 'tb' Variablen klassenübergreifend zu machen. Oder speichern Sie zumindest den Verweis auf die erstellten Steuerelemente in einer Liste (oder einem Array) und versuchen Sie anschließend, darauf zuzugreifen, wenn Sie möchten.

Da Sie das Steuerelement in der OnInit-Funktion erstellen, werden sie vor dem Laden des Ansichtszustands erstellt. Wenn also der Ansichtszustand geladen wird, werden vom Benutzer gepostete Werte vom Ansichtsstatus in das Steuerelement zurückgespeichert und Sie können somit von Ihrem Code darauf zugreifen. Sie müssen nur den Verweis auf die Steuerelemente behalten.