这是对我有用的 VB.NET 代码:
<Extension()> _
Function FindChildControlById(ByVal controlToStartWith As Control, ByVal controlIdToFind As String) As Control
If controlToStartWith Is Nothing Then Return Nothing
If controlToStartWith.ID = controlIdToFind Then Return controlToStartWith
For Each childControl As Control In controlToStartWith.Controls
Dim resCtrl As Control = FindChildControlById(childControl, controlIdToFind)
If resCtrl IsNot Nothing Then Return resCtrl
Next childControl
Return Nothing
End Function ' Function FindChildControlById(ByVal controlToStartWith As Control, ByVal controlIdToFind As String) As Control
最初的 VB.NET 代码要归功于 George。我只修改了一点点,有 2 个功能更改:如果/当 null/Nothing 作为输入控件传递时,我的不会出错,而我的作为扩展实现。我的其他 3 个小更改不会影响功能,但对我来说,它们是代码简化。但我知道这是非常主观的。
所以这个方法可以用于:
Dim c1 As Control = Page.FindChildControlById("aspControlID")
如果您想将其转换为 Control 的特定子类,如下所示:
Dim c1 As Control = Page.FindChildControlById("aspControlID")
Dim c As HyperLink = TryCast(c1, HyperLink)
更新:我的函数现在被命名为“FindChildControlById”(以前是“FindMiControl”)。我更喜欢 SpeedNet 的建议。