2009-06-24 15 views
1

Ich habe eine Benutzer Klasse mit Funktionen Login() und Logout() und GetData() senden. Es gibt ein UserChanged Ereignis, das ausgelöst wird, wenn eine dieser Funktionen aufgerufen wird.asp.net: eines Objekts Ereignis von einem Usercontrol auf seine Eltern

Ich habe UserControls auf meiner Default.aspx (sie sind dynamisch hinzugefügt).

Ich habe ein UserControl namens Login.ascx. Es bietet die Funktionalität zur Verwendung der Benutzerklasse: Sie können sich hier anmelden/abmelden. Ich habe einen **** EventHandler * für ** UserChanged ***** (wenn ich keinen habe, scheitert es mit einer Ausnahme des Objekts nicht gefunden).

Ich muss die anderen UserControls über die Änderungen des Benutzerstatus alarmieren. Ich muss irgendwie das UserChanged-Ereignis von Login.ascx zu seinem Parent, Default.aspx übergeben.

Wie kann ich das tun?

Antwort

4

Login.ascx.cs

public delegate void OnUserChangedHandler(object sender); 
public OnUserChangedHandler OnUserChanged; 

private void RaiseUserChangedEvent() //Call this method when the user changes 
{ 
    //UserChanged Event 
    if (OnUserChanged != null) 
    { 
     OnUserChanged(this); 
    } 
} 

Default.aspx.cs

protected override void OnInit(EventArgs e) 
{ 
    InitializeComponent(); 
    base.OnInit(e); 
} 

private void InitializeComponent() 
{ 
    loginControl.OnUserChanged += OnUserChanged; 
} 

private void OnUserChanged(object sender) 
{ 
    //Code here to do something with other controls on this page 
} 
+0

So habe ich es versucht. Das Problem ist, dass das "OnUserChanged" -Ereignisobjekt null ist, also wird es nie gefeuert ... Ich weiß sicher, dass der Listener hinzugefügt wird (Ich breche und sehe es passieren), aber wenn es ausgelöst werden muss, ist es null .. . – Ted

0

Zuerst muss die Steuerung das UserChanged-Ereignis übertragen, und dann muss die Seite verdrahtet werden, um auf das Ereignis zu warten.

Es gibt eine Menge eine gute Ressourcen gibt, wie benutzerdefinierte Ereignisse und Event-Handler zu implementieren ...

Versuchen Sie dieses von csharphelp.com

http://www.csharphelp.com/archives4/archive603.html

+0

Also muss ich einen Delegaten für die UserChange Ereignis schaffen? – balint

+0

Sieh dir Jon's Post an, er hat einige großartige Code-Schnipsel ... Ich denke, er zeigt, was ich vorgeschlagen habe. GL – BigBlondeViking

2

Es gibt eine andere Möglichkeit, Übergeordnetes Steuerelement über einige Aktionen informieren - RaiseBubbleEvent.

Sie können hier darüber lesen: Using RaiseBubbleEvent to Tell a Parent ASP.NET Control to Rebind

Die Sache ist die, dass die untergeordneten Steuerelemente ruft Methode Raisebubbleevent (...) Und alle es Eltern (egal, wie weit sie in der Hierarchie sind) können überschreiben Sie die Methode OnBubbleEvent, um dieses Ereignis zu behandeln. Rückgabewert dieser Methoden gibt an, ob dieses Ereignis an das nächste übergeordnete Element übergeben werden muss oder nicht.

Verwandte Themen