Laden...

ASPX - ASCX Event auslösen und Event abrufen

Erstellt von ChrisB_BT vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.000 Views
C
ChrisB_BT Themenstarter:in
15 Beiträge seit 2009
vor 14 Jahren
ASPX - ASCX Event auslösen und Event abrufen

Hallo zusammen,

ich steige gerade neu in die ASP Webentwicklung mit C# ein. (Vorher mit VB.Net).

Ich versuche gerade folgendes zu realisieren:
Ich habe eine Default.aspx Seite und eine WebUserControl (.ascx).
Die WebUserControl ist als Ajax-Modal Popup in die Default.aspx Seite eingebunden und wird per Buttonclick aufgerufen.
Das WebUserControl enthält 2 Eingabefelder(Textboxen) und 2 Buttons (Speichern/Abbruch).

Nun zu meinem 1. Problem:
Wie kann ich per Button-Click ein eigenes Event auslösen, welches die Einträge in den Textboxen an die aufrufende Seite zurückgeben kann?

Meine Code aus der ASCX Datei hierzu:


 public delegate void SpeichernEventHandler(string text_betreff, string text_kommentar);

    public partial class SpeichernDialog : System.Web.UI.UserControl
    {
        
        public event SpeichernEventHandler Speichern;

        protected void Page_Load(object sender, EventArgs e)
        {
             .....
        }

        protected void btn_Speichern_Click(object sender, System.EventArgs e)
        {
            if (Speichern != null)
            {
                Speichern(txt_betreff.Text, txt_kommentar.Text);
            }
        }
    }

Die Abfrage Confirm != null führt immer zum Ergebnis null...

In VB.net würde ich das so realisieren:


Public Event Speichern(ByVal betreff As String, ByVal kommentar As String)

Protected Sub btn_Speichern_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn_Speichern.Click

    RaiseEvent Speichern(Me.txt_betreff.Text, Me.txt_kommentar.Text)

End Sub

Mein 2. Problem ist, wie fange ich das Event aus dem WebControl auf der ASPX-Seite ab (der Button-Click). Denn jetzt möchte ich ja wissen, dass der Button geklickt wurde um die Daten auslesen zu können (Betreff/Kommentar)

Hier habe ich ehrlich gesagt keine Ahnung wie das funktionieren könnte, in VB.Net würde ich das so machen (Denn da das WebControl ja schon eingebunden ist, kann ich auch auf das Event zugreifen):


Private Sub speichern_uebergabe(ByVal betreff As String, ByVal kommentar As String) Handles SpeichernDialog.Speichern
     Label1.Text = "Ihre Eingabe: " & betreff & kommentar
End Sub

Danke schonmal für alle Vorschläge und Denkanstöße.

Viele Grüße,

Chris

458 Beiträge seit 2007
vor 14 Jahren

Stichwort: Event Bubbling.

be the hammer, not the nail!

C
ChrisB_BT Themenstarter:in
15 Beiträge seit 2009
vor 14 Jahren

Hm, habe mir das mal hier http://msdn.microsoft.com/en-us/library/aa720044(VS.71).aspx durchgelesen.
Allerdings löst dies das Problem nicht. Auch dieses Event (ich hab mal Submit genommen) ist zur Laufzeit "null"...

Und dann wäre immer noch die Frage, wie ich auf der Default.aspx Seite abfangen kann, dass der Button "Speichern" geklickt wurde und jetzt Betreff und Kommentar zur Übergabe bereitstehen?

Danke und Gruß,

Chris

691 Beiträge seit 2007
vor 14 Jahren

mit freundlichen Grüßen,
Tomot

Projekte: www.gesellschaftsspieler-gesucht.de

C
ChrisB_BT Themenstarter:in
15 Beiträge seit 2009
vor 14 Jahren
Gelöst!

Hi auch.

Diese Hinweise haben zur Lösung geführt! Vielen Dank Tomot!

Verwendet habe ich diesen Weg: [Lösung] Problem mit EventHandler

Für alle, die ebenfalls mal mit diesen Problemen kämpfen sollten hier noch mein Code:

In der WebControl (ASCX):


public delegate void SpeichernEventHandler(string text_betreff, string text_kommentar);

    public partial class SpeichernDialog : System.Web.UI.UserControl
    {

        public event SpeichernEventHandler Speichern;

        protected void Page_Load(object sender, EventArgs e)
        {
             .....
        }

        protected virtual void OnSpeichern(string text_betreff, string text_kommentar)
        {
         SpeichernEventHandler mySpeichern = Speichern;
         if (mySpeichern != null)
         {
          mySpeichern(text_betreff, text_kommentar);
          }
         }

        protected void btn_Speichern_Click(object sender, System.EventArgs e)
        {
            OnSpeichern(txt_betreff.Text, txt_kommentar.Text);
        }
    } 

Und hier der Code für die Eventregistrierung auf der aufrufenden ASPX-Seite.
(Eine Bekanntmachung der Webcontrol ist nicht mehr nötig, da sie ja bereits mit <%Register...> in der ASPX-Datei eingefügt wurde.
Somit kann man auf alle öffentlichen Member zurückgreifen.


        protected void Page_Load(object sender, EventArgs e)
        {
            //EventHandler für Popup hinzufügen
            Popup_Dialog.Speichern += new Popup.SpeichernEventHandler
(Popup_SpeichernHandler);
         ...
         }

        protected void Popup_SpeichernHandler(string betreff, string kommentar)
        {
            Label1.Text = "Eintrag: " + betreff + " " + kommentar;
        }


Und schon funktioniert alles... 😉
Vielen Danke nochmal und Grüße,

Chris