2010-12-22 51 views
2

Ich habe eine ASP.NET-Seite mit einer Schaltfläche, das Ereignis, das die Schaltfläche auf ihrem Click-Ereignis muss variieren, abhängig davon, welche Optionen weiter oben auf der Seite ausgewählt sind. Die Schaltfläche selbst ist in der Masterseite enthalten, und ihre Aktionen werden durch die Auswahl auf der untergeordneten Seite beeinflusst.Dynamischer Ereignishandler nach Postback verloren

Um dies zu tun, habe ich eine Methode in der Masterseite, die von der untergeordneten Seite aufgerufen wird, wenn ein Benutzer eine Schaltfläche drückt, die Eventhandler von dieser Schaltfläche verwendet wird, die dann Masterpage Eventhandler zugewiesen wird für diese Schaltfläche:

public void assignEvent(EventHandler saveEvent) 
    { 
      this.SaveButtonEvent+= saveEvent 
    } 

wenn dann die Taste auf der Master-Seite speichern, nennt es, dass Eventhandler

protected void save_Click(object sender, EventArgs e) 
    { 
     if (this.SaveButtonEvent != null) 
     { 
      this.SaveButtonEvent(this, e); 
     } 
    } 

die Event-Handler in dem ersten Abschnitt des Codes in Ordnung zugeordnet ist, aber weil die Press Save Button bewirkt einen Postback, den SaveButtonEve Der nt-Ereignishandler wird auf null gesetzt, und nichts passiert.

Wie kann ich den Inhalt von SaveButtonEvent Event Handler während des Postbacks beibehalten, oder gibt es eine bessere Möglichkeit, dies zu tun?

EDIT:

Ich kann dies durch das Speichern der Eventhandler, um die Sitzung zu arbeiten, aber dies scheint nicht wie eine gute Idee.

+0

Können Sie zeigen, wie Sie die Schaltfläche erstellen? Deklarativ oder programmgesteuert? Wenn ja wo in der Seite Live Cylce? – Marcel

+0

Alternativ können Sie das CommandArgument eines Buttons verwenden (siehe http://msdn.microsoft.com/de-de/library/system.web.ui.webcontrols.button.commandargument.aspx) und dann einen Fall bearbeiten, der Ihre verschiedenen Probleme behandelt Optionen. – Marcel

Antwort

0

Wenn der Benutzer die Schaltfläche auf der Child-Seite drückt, speichern Sie einen Wert (im Viewstate), der angibt, welcher Event-Handler übergeben werden soll. Überprüfen Sie dann im Ladeereignis der untergeordneten Seite, wenn es sich um ein Postback handelt, immer den gespeicherten Wert und ordnen Sie den Ereignishandler entsprechend durch Aufruf der Masterseitenmethode zu.

Verwandte Themen