2009-04-15 7 views
1

Wie kann ich ein Ereignis in einer Inhaltsseite auslösen, auf die die Masterseite dann reagieren kann?Senden von Ereignissen von einer Seite an die Masterseite in ASP.NET

Zum Beispiel habe ich eine Inhaltsseite, die eine Masterseite verwendet. Die Masterseite enthält die Navigationsleiste der Website. Abhängig von der Seite, auf der ich bin, möchte ich ein Ereignis an die Masterseite senden, um die CSS-Klasse des aktuellen Seitenmenüelements in der Navigationsleiste zu ändern.

Ich verwende Visual Studio 2008 und ASP.NET 3.5 und C#.

Danke!

Antwort

2

Bearbeiten, von dem, was Sie fragen, brauchen Sie nicht wirklich ein Ereignis, Sie wollen nur eine Methode auf dem Master aufrufen. aus der Spitze von meinem Kopf, in dem Master:

public void ChangeCss(string className) 
{ 
    someObject.CssClass = className; 
} 

dann in Ihrer Seite ein:

(this.Master as MyMasterType).ChangeCss("myclass"); 
0

Erstellen Sie eine Basisseitenklasse. Erstellen Sie den entsprechenden Delegierten & Ereignis für das gleiche. Dann in der Master-Seite, dies zu tun -

(Page as BasePage).Event += attach event handler here in the master page. 

Die Seitenklasse so sein muss -

public class MyPage : BasePage { } 

Die Basepage Klasse muss wie seine diese -

public class BasePage : System.Web.UI.Page { } //This will go in the App_Code folder. 
2

Wenn das Ereignis eintritt Verwenden Sie auf allen Inhaltsseiten die BasePage-Lösung von Kirtan. Wenn eine Basisseite nicht geeignet ist, fügen Sie diese bei jedem Laden der Seite hinzu, wenn die Seite geladen wird.

+0

Das hat funktioniert. Vielen Dank! –

0

Ein Ereignis wie der beste Weg scheint nicht um dies anzuzeigen, da Sie benötigen, um Ihre Masterpage zu Wenn Sie Ihre Seiten verstehen, könnten Sie eine Standardeigenschaft auf den Seiten haben, die ihren 'Schlüssel' in der Navigation anzeigt.

In Ihrem Masterpage Code:

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

    var navigatable = this.Page as INavigatable; 

    if (navigatable != null) 
     this.Navigation.ActiveKey = navigatable .NavigationKey; 
} 

navigierbare Schnittstelle:

public interface INavigatable 
{ 
    string NavigationKey { get; } 
} 

Seite Beispiel:

public class AboutPage : Page, INavigatable 
{ 
    public string NavigationKey 
    { 
     get { return "About"; } 
    } 
} 
0

können Sie das Ereignis auslösen, eine Technik wie EventBubbling genannt werden.

Verwandte Themen