2009-04-13 46 views
1

Ich habe eine dynamisch erstellte Schaltfläche in meinem Webformular hinzugefügt. Aber das Klickereignis funktioniert nicht. Kann mir bitte jemand erklären warum?ASP.NET - Dynamisch erstellte Schaltfläche

Dies ist mein Code:

Button save = new Button(); 
    save.ID = "btnSave"; 
    save.Text = "Save"; 
    save.Click += new System.EventHandler(this.Save_Click); 
    Webform.Controls.Add(save); 

protected void Save_Click(object sender, EventArgs e) 
{ 

    Response.Redirect("Default.aspx"); 
} 

Seine auf die gleiche Seite selbst wieder kommen. Es wird nicht auf Default.aspx umgeleitet.

Antwort

4

Ihr Codebeispiel ist nicht vollständig genug für eine Diagnose, aber ich werde eine Aufnahme machen.

An welcher Stelle des Seitenlebenszyklus fügen Sie die Schaltfläche der Seite hinzu? Wenn Sie es in PreRender tun, funktioniert es deshalb nicht. Sie sollten es während Init machen.

UPDATE:

Sie können nicht dynamisch eine Kontrolle nach der Init-Phase des Lebenszyklus Seite erstellen und bekommen es richtig funktioniert, wenn Sie es die gleiche Art und Weise jedes Mal erstellen. Dies liegt daran, dass der Lebenszyklus wie folgt aussieht:

Init -> Laden ViewState -> Seiten Laden -> Event Handler -> PreRender.

Sie erstellen eine Schaltfläche und geben ihr während der vorletzten Phase einen Ereignishandler. Dies bedeutet, dass die Schaltfläche niemals zum Speichern von ViewState mit der Seite registriert wird. Daher wird der gesamte Status für diese Schaltfläche nicht wiederhergestellt, wenn darauf geklickt wird. Dies bedeutet, dass der zugewiesene Ereignishandler sich in Luft auflöst und nie aufgerufen wird.

Mein Vorschlag wäre, die Schaltfläche Speichern normalerweise auf der Seite (nicht dynamisch) zu erstellen, und legen Sie es einfach sichtbar = "False". Klicken Sie dann im Click-Handler Ihrer ersten Schaltfläche einfach auf die Schaltfläche Speichern. Sichtbar = "Wahr".

+0

Ich mache es auf Knopfdruck –

+0

Sie erstellen eine weitere Schaltfläche auf Knopf klicken? –

+0

ya im Erstellen einer anderen Schaltfläche auf der Schaltfläche klicken und das ist der Ereignishandler der neu erstellten Schaltfläche. –

0

Können Sie dies debuggen und feststellen, ob der Code überhaupt zum click-Ereignis gelangt, oder gibt es ein Problem mit Ihrer Weiterleitung? Womp ist korrekt, binden Sie das Ereignis in Page_Init.

Verwandte Themen