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