2009-08-21 7 views
0

Grüße Alle, Ich habe zwei Ascx geladen in der Seite-Init-Ereignis einer aspx-Seite. Steuerelement 1 verfügt über eine Optionsfeldliste, die eine Dropdown-Liste auf Steuerelement 2 auf seine ausgewählte Indexänderung reagieren soll. Bisher rufe ich RaiseBubbleEvent im SelectedIndexChange-Handler auf und gebe eine Kontrollreferenz und commandArgs weiter. Dann überschreibe ich im aspx OnBubbleEvent und ich kann die Kontrollreferenz und commandArgs erhalten. Meine Frage ist, wie ich diese Informationen an Control 2 weiterleite. Die Seite kennt die Steuerelemente nicht, da sie dynamisch geladen und asp: PlaceHolders im aspx hinzugefügt werden. Ich brauche Control 2, um zu wissen, welcher Radiobutton ausgewählt wurde, damit ich die Datenquelle für das Dropdown auf Kontrolle 2 ändern kann. Hat jemand irgendwelche Beispiele von so etwas? Irgendwelche Hinweise oder Tipps würden geschätzt werden.ASP.NET Wie können zwei dynamisch geladene Benutzersteuerelemente auf die jeweils anderen Ereignisse reagieren?

Danke, ~ ck in San Diego

Antwort

0

Ich bin mir nicht sicher, dass dies eine sehr gute Lösung, aber es sollte funktionieren. Erstellen Sie einen Handler für das Ereignis in Steuerelement 2 und haben Sie eine Möglichkeit, auf einen Delegaten für diesen Handler zuzugreifen. Verbinden Sie dann das Ereignis von Steuerelement 1 nur mit dem von diesem Accessor zurückgegebenen Handler. Sehr grobes Beispiel:

In control1:

public event SelectedIndexChanged; 

public void PageLoad() 
{ 
    radioList.SelectedIndexChanged += new EventHandler(RadSelectedIndexChanged); 
} 

public void RadSelectedIndexChanged(object sender, EventArgs args) 
{ 
    SelectedIndexChanged(sender, args); 
} 

In aspx Seite:

control1.SelectedIndexChanged += control2.GetHandler(); 

In control2:

public EventHandler GetHandler() 
{ 
    return new EventHandler(HandleEvent); 
} 

protected void HandleEvent(object sender, EventArgs args) 
{ 

} 
0

Nun, Control 2 sollte eigentlich nur auf die Befestigung werden 'SelectedIndexChanged' Ereignis des anderen Steuerelements. Ist das aus irgendeinem Grund nicht möglich?

0

Da Sie erwähnen, dass die Seite diese Steuerelemente nicht kennt, ist das Beste, die Control1-Klasse zu haben, um eine Schnittstelle mit einer I-will-to-hoser-to-your-event-Setter-Methode verfügbar zu machen.

Control2 sollte das übergeordnete Element (die Seite) nach anderen gleichgeordneten Steuerelementen durchsuchen, die das Interface implementieren, und dann den Setter aufrufen, der einen Verweis auf seinen Handler übergibt.

Auf diese Weise können die Steuerelemente auf einer anderen Seite ohne Änderung abgelegt werden.

Edit:

Added a sample web application zum Download bereit. Der Quellcode wird für die Public Domain freigegeben.

+0

Ich mag diese Idee. Wie erstelle ich eine Schnittstelle mit einer Setter-Methode, die ich auf Ihren Event hören möchte? Wenn Sie "Setter" sagen, meinen Sie eine Eigenschaft {set;} und welchen Typ die Methode zurückgeben soll. Ich entschuldige mich, ich bin ein bisschen Neuling bei der Programmierung von Veranstaltungen. Vielen Dank. – Hcabnettek

+0

@Kettenbach: Beispiel-App hinzugefügt. – devstuff