2009-01-06 2 views
13

Ich bin auf der Suche nach einer Möglichkeit, eine Masterseite (vorzugsweise) stark von einem Benutzersteuerelement einzugeben, das in einer Inhaltsseite gefunden wird, die die Masterseite verwendet.Wie wird eine Masterseite von einem Benutzersteuerelement aus referenziert?

Leider kann man dies nicht in einer Benutzersteuerung verwenden:

<%@ MasterType VirtualPath="~/Masters/Whatever.master" %> 

Ich versuche, eine Eigenschaft der Masterseite von der Benutzersteuerung für den Zugriff auf und würde lieber nicht die Eigenschaft passieren muß aus Die Masterseite zur Inhaltsseite zum Benutzersteuerelement, da mehrere Inhaltsseiten dieselbe Benutzersteuerung verwenden. Eine Veränderung, ein Platz was nicht.

+0

Was ist mit dem Hinzufügen einer Eigenschaft zum Benutzersteuerelement namens "Master" und dann nur eine Referenz übergeben, wenn das Steuerelement deklariert wird? – Kevin

+0

Ich versuche zu vermeiden, irgendwelche Referenzen durch die Kontrolle zu übergeben, aber guter Vorschlag. –

Antwort

18

Versuchen Sie Page.Master.

Whatever whatev = (Whatever)Page.Master; 

Du musst dir die richtigen using Anweisungen am Anfang der Datei stellen Sie sicher, hinzufügen oder den Master-Seite Typen inline qualifizieren.

Ein potenzieller Fehler ist, wenn dieses Steuerelement von einer anderen Seite verwendet wird, deren Masterseite NICHT vom selben Typ ist. Dies würde nur zur Laufzeit gefangen werden.

+1

Nur um zu klären Was (oben) ist der eigentliche Typ Ihrer Masterseite. Mit dem Standard-Masterseitentyp-Namen könnten Sie also ... SiteMaster masterPage = (SiteMaster) Page.Master; http://stackoverflow.com/questions/4013343/access-master-page-public-method-from-user-control-class-page – DeveloperDan

0

Haben Sie Page.FindControl ("name") auf der Benutzersteuerung versucht?

0

Der beste Weg, um es zu tun, ist tatsächlich eine benutzerdefinierte Klasse zu bauen, die auf UserControl basiert, geben Sie eine Master-Eigenschaft mit einem get-Accessor, der durch die this.Page.Parent bis zum Anschlag fischt auf Masterseiten stoßen (Wenn Sie verschachteln, ist dieser Schritt andernfalls unnötig) und geben Sie dann das Websteuerelement als den Typ der Masterseite zurück, die Sie verwenden möchten. Wenn Sie dann ein neues Benutzersteuerelement hinzufügen, ändern Sie die Basisklasse in den Namen Ihrer benutzerdefinierten Klasse. Auf die .Master-Eigenschaft kann zugegriffen werden und sie wird ordnungsgemäß als Masterseite angezeigt, die sie verwenden soll.