Во-первых, вы должны знать, что MasterPages фактически находятся внутри Pages. Настолько, что событие Load MasterPage фактически вызывается после события Load вашего ASPX.
Это означает, что объект Page на самом деле является высшим элементом управления в иерархии элементов управления.
Итак, зная это, лучший способ найти любой элемент управления в такой вложенной среде - это написать рекурсивную функцию, которая перебирает все элементы управления и дочерние элементы управления, пока не найдет тот, который вы ищете. в этом случае ваши мастер-страницы на самом деле являются дочерними элементами управления главной страницы.
Вы попадаете на объект главной страницы из любого элемента управления следующим образом:
C #:
this.Page;
VB.NET
Me.Page
Я считаю, что обычно метод класса FindControl () элемента управления довольно бесполезен, поскольку среда всегда вложена.
Потому что, если это так, я решил использовать новые функции расширения .NET 3.5 для расширения класса Control.
Используя приведенный ниже код (VB.NET), скажем, вашу папку AppCode, все ваши элементы управления теперь будут выполнять рекурсивный поиск, вызывая FindByControlID ()
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