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
Stichwort: Event Bubbling.
be the hammer, not the nail!
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
Hi. Schau dir mal an
[FAQ] Eigenen Event definieren / Information zu Events
und http://www.guidetocsharp.de/Events.aspx an.
mit freundlichen Grüßen,
Tomot
Projekte: www.gesellschaftsspieler-gesucht.de
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