2008-08-15 6 views
5

Ich bin ziemlich neu in ASP.NET und versuche zu lernen, wie die Dinge gemacht werden. Ich komme von einem C# -Hintergrund, also ist der Code-Behind-Teil einfach, aber denken wie ein Web-Entwickler ist unbekannt.Wie kann ich Daten von einer aspx-Seite an ein ascx modales Popup übergeben?

Ich habe eine Aspx-Seite, die ein Raster von Kontrollkästchen enthält. Ich habe eine Schaltfläche, die über ein Button_Click-Ereignis codiert ist, um eine Liste der Zeilen zu sammeln, die überprüft werden, und eine Sitzungsvariable aus dieser Liste zu erstellen. Dieselbe Schaltfläche wird (über TargetControlID) durch den ModalPopupExtender meiner Ascx-Seite referenziert, der das Panel auf der Ascx-Seite steuert.

Wenn auf die Schaltfläche geklickt wird, wird das modale Popup geöffnet, aber das Ereignis Button_Click wird nie ausgelöst, sodass das Modal seine Sitzungsdaten nicht erhält.

Da die beiden Seiten getrennt sind, kann ich den ModalPopupExtender nicht aus dem aspx.cs-Code aufrufen, ich kann die Liste der Kontrollkästchen aus dem Code ascx.cs nicht erreichen, und ich sehe keinen Weg dazu Füllen Sie meine Sitzungsvariable auf und aktivieren Sie programmgesteuert eine andere ausgeblendete Schaltfläche oder ein anderes Steuerelement, die dann mein modales Popup öffnen.

Irgendwelche Gedanken?

Antwort

3

Eine Benutzersteuerdatei (.ascx) ist eine Gruppe von Steuerelementen, die Sie gruppiert haben, um einige wiederverwendbare Funktionen bereitzustellen. Die darin definierten Steuerelemente werden während des Seitenlebenszyklus weiterhin zur Kontrollsammlung der Seite (ASPX) hinzugefügt. Der ModalPopupExtender verwendet Javascript und DHTML, um die Steuerelemente auf der Clientseite des Benutzersteuerelements ein- und auszublenden. Was Sie sehen, ist, dass das click -Ereignis clientseitig vom ModalPoupExtender behandelt wird und das Post-Back auf den Server abbricht. Dies ist das Standardverhalten nach Entwurf. Sie können jedoch sicher auf die Kontrollsammlung der Seite zugreifen, indem Sie den Code-Behind Ihrer Benutzersteuerung verwenden, da dies alles Teil derselben Kontrollstruktur ist. Verwenden Sie einfach die FindControl (xxx) -Methode eines beliebigen Steuerelements, um nach dem Kind zu suchen, das Sie benötigen.

0

Sorry, aber ich bin verwirrt. Sie können einen Ascx nicht direkt anrufen, also ...

Ist Ihr Modal-Code, den Sie anrufen, auf derselben Seite, wie ein ausgeblendetes Panel, usw .;

Oder ist es eine andere ASPX-Seite, die Sie bei einem Klickereignis aufrufen?

1

Nach ein paar Recherchen nach DancesWithBamboo's Antwort, habe ich herausgefunden, wie es funktioniert.
Ein Beispiel Bezug auf meine ascx Seite innerhalb meiner aspx Seite:

<uc1:ChildPage ID="MyModalPage" runat="server" /> 

Die aspx Code-behind, um den ModalPopupExtender zu packen und öffnen (mit dem Namen ModalPopup) würde wie folgt aussehen:

AjaxControlToolkit.ModalPopupExtender mpe = 
    (AjaxControlToolkit.ModalPopupExtender) 
      MyModalPage.FindControl("modalPopup"); 
mpe.Show();