, sollten Sie wissen, dass Masterpages innerhalb Seiten tatsächlich 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 dies wissen, besteht der beste Weg, ein Steuerelement in einer solchen verschachtelten Umgebung zu finden, darin, eine rekursive Funktion zu schreiben, die alle Steuerelemente und untergeordneten Steuerelemente durchläuft, bis die gesuchte gefunden wird. In diesem Fall sind Ihre MasterPages tatsächlich untergeordnete Steuerelemente des Hauptsteuerelements.
Sie gelangen auf das Haupt-Page-Objekt aus dem Inneren jeder Kontrolle wie folgt aus:
C#:
this.Page;
VB.NET
Me.Page
ich, dass in der Regel finden, ist die Kontrolle der Klasse Findcontrol() -Methode ziemlich nutzlos ist, da die Umgebung immer verschachtelt.
Weil, wenn dies, ich habe beschlossen, .NET 3.5 neue Erweiterungsfunktionen zu verwenden, um die Control-Klasse zu erweitern.
Durch den nachfolgenden Code (VB.NET) verwendet wird, in etwa Ihren AppCode Ordner, alle Ihre Kontrollen werden nun eine rekursive Fund peform von FindByControlID Aufruf()
Public Module ControlExtensions
<System.Runtime.CompilerServices.Extension()> _
Public Function FindControlByID(ByRef SourceControl As Control, ByRef ControlID As String) As Control
If Not String.IsNullOrEmpty(ControlID) Then
Return FindControlHelper(Of Control)(SourceControl.Controls, ControlID)
Else
Return Nothing
End If
End Function
Private Function FindControlHelper(Of GenericControlType)(ByVal ConCol As ControlCollection, ByRef ControlID As String) As Control
Dim RetControl As Control
For Each Con As Control In ConCol
If ControlID IsNot Nothing Then
If Con.ID = ControlID Then
Return Con
End If
Else
If TypeOf Con Is GenericControlType Then
Return Con
End If
End If
If Con.HasControls Then
If ControlID IsNot Nothing Then
RetControl = FindControlByID(Con, ControlID)
Else
RetControl = FindControlByType(Of GenericControlType)(Con)
End If
If RetControl IsNot Nothing Then
Return RetControl
End If
End If
Next
Return Nothing
End Function
End Module
Das funktioniert perfekt. Vielen Dank. –
+1 danke das hat mir auch geholfen – leen3o
+1 Ich weiß, das ist wie 5 Jahre alt, aber diese Methode hat mir Kopfschmerzen erspart, danke! – psoshmo