Suchen nach Steuerelementen in verschachtelten Masterseiten

8

Ich habe eine Masterseite, die zwei Ebenen enthält. Es hat eine Masterseite und diese Masterseite hat eine Masterseite.

Wenn ich Steuerelemente in einen ContentPlaceHolder mit dem Namen "bcr" stecke - muss ich die Steuerelemente wie folgt finden:

%Vor%

Bin ich total verloren? Oder muss es so gemacht werden?

Ich bin dabei, mit einem MultiView zu arbeiten, das in einem konditionalen Content-Control enthalten ist. Wenn ich also die Ansicht ändern möchte, muss ich einen Hinweis auf dieses Kontrollrecht bekommen? Diese Referenz zu bekommen, wird noch schlimmer! Gibt es einen besseren Weg?

Danke

    
user53885 08.04.2009, 01:15
quelle

6 Antworten

4

Zuerst sollten Sie wissen, dass MasterPages tatsächlich in Pages sitzen. So sehr, dass das Load-Ereignis einer MasterPage tatsächlich nach dem Load-Ereignis Ihres ASPX aufgerufen wird.

Dies bedeutet, dass das Page-Objekt tatsächlich das höchste Steuerelement in der Steuerungshierarchie ist.

Wenn Sie das wissen, ist es am besten, in einer solchen verschachtelten Umgebung ein Steuerelement zu finden, indem Sie eine rekursive Funktion schreiben, die alle Steuerelemente und untergeordneten Steuerelemente durchläuft, bis Sie die gesuchte gefunden haben. In diesem Fall sind Ihre MasterPages tatsächlich untergeordnete Steuerelemente des Seitensteuerelements.

Sie erreichen das Hauptseitenobjekt von einem beliebigen Steuerelement aus:

C #:

this.Page;

VB.NET

Me.Seite

Ich finde, dass die FindControl () - Methode der Control-Klasse normalerweise ziemlich nutzlos ist, da die Umgebung immer verschachtelt ist.

Wenn dies der Fall ist, habe ich beschlossen, die 3.5 neuen Extension-Funktionen von .NET zu verwenden, um die Control-Klasse zu erweitern.

Wenn Sie den folgenden Code verwenden (VB.NET), beispielsweise in Ihrem AppCode-Ordner, führen alle Ihre Steuerelemente jetzt eine rekursive Suche durch, indem Sie FindByControlID ()

aufrufen %Vor%     
andy 08.04.2009, 01:33
quelle
22

Das Finden von Steuerelementen ist ein Schmerz, und ich habe diese Methode verwendet, die ich aus dem CodingHorror-Blog vor einiger Zeit, mit einer einzigen Änderung, die null zurückgibt, wenn eine leere ID übergeben wird.

%Vor%

In Ihrem Fall würde ich Folgendes brauchen:

%Vor%

Die Verwendung dieser Methode ist im Allgemeinen viel bequemer, da Sie nicht genau wissen müssen, wo sich das Steuerelement befindet, um es zu finden (vorausgesetzt, Sie kennen die ID natürlich). Wenn Sie jedoch Steuerelemente mit demselben Namen verschachtelt haben, Sie werden wahrscheinlich ein seltsames Verhalten bekommen, das könnte etwas sein, auf das Sie achten sollten.

    
Mun 08.04.2009 01:35
quelle
4

Obwohl ich Rekursion liebe und mit andy und Mun übereinstimme, ist ein anderer Ansatz, den Sie vielleicht in Betracht ziehen, ein stark eingegebene Masterseite . Alles, was Sie tun müssen, ist eine Direktive in Ihrer Aspx-Seite hinzuzufügen.

Sie sollten nicht auf das Steuerelement einer Seite von Ihrer Masterseite aus zugreifen, sondern stattdessen von der Seite selbst auf ein Steuerelement in Ihrer Masterseite zugreifen. Dieser Ansatz ist sehr sinnvoll, wenn Sie auf Ihrer Masterseite eine Kopfzeilenbezeichnung haben und den Wert für jede Seite festlegen möchten, die den Master verwendet.

Ich bin mir nicht 100% sicher, aber ich denke, das wäre eine einfachere Technik mit verschachtelten Masterseiten, da Sie den VirtualPath einfach auf den Master richten, der das Steuerelement enthält, auf das Sie zugreifen möchten. Es kann sich jedoch als schwierig erweisen, wenn Sie auf zwei Steuerelemente zugreifen, eines auf jeder entsprechenden Masterseite.

    
Aaron Daniels 08.04.2009 01:48
quelle
2

Hier ist ein Code, der generischer ist und mit einer benutzerdefinierten Bedingung arbeitet (die ein Lambda-Ausdruck sein kann!)

Anruf:

%Vor%

Steuererweiterung

%Vor%     
Raevean 11.10.2012 19:13
quelle
1

Ich habe die Methode <%@ MasterType VirtualPath="~/MyMaster.master" %> verwendet. Ich habe eine Eigenschaft in der Haupt-Master-Seite dann in der Detail-Master-Seite andere Eigenschaft mit dem gleichen Namen Aufruf der Master-Eigenschaft und es funktioniert gut.

Ich habe dies in der Hauptmasterseite

%Vor%

Dies ist nur ein div-Element, das eine Fehlermeldung anzeigen muss. Ich möchte diese Eigenschaft in den Seiten mit der Detail-Master-Seite verwenden (diese ist mit dem Haupt-Master verschachtelt).

Dann im Detail Master habe ich das

%Vor%

Ich rufe die Haupt-Master-Eigenschaft vom Detail-Master auf, um das gleiche Verhalten zu erzeugen.

    
Juan 08.04.2010 05:06
quelle
0

Ich habe es gerade perfekt funktioniert.

In contentpage.aspx schrieb ich Folgendes:

If Master.Master.connectsession.IsConnected Then my coded comes in here End If

    
ebot64 30.07.2010 11:07
quelle

Tags und Links