Asp.net vb.net通过id的一部分查找控件

Asp.net vb.net通过id的一部分查找控件,asp.net,vb.net,webforms,findcontrol,Asp.net,Vb.net,Webforms,Findcontrol,我需要在一个页面中找到一个控件,但我不知道完整的ID。我只知道ID的一部分 我不想做的事情是这样的: 控件=页。FindControlpart1和part2 其中,第1部分是ID的已知部分,第2部分是未知部分。对于它的价值,您可以使用此扩展方法搜索所有子控件: Module ControlExtensions <Runtime.CompilerServices.Extension()> Public Function FindControlPart(root As C

我需要在一个页面中找到一个控件,但我不知道完整的ID。我只知道ID的一部分

我不想做的事情是这样的:

控件=页。FindControlpart1和part2


其中,第1部分是ID的已知部分,第2部分是未知部分。

对于它的价值,您可以使用此扩展方法搜索所有子控件:

Module ControlExtensions
    <Runtime.CompilerServices.Extension()>
    Public Function FindControlPart(root As Control, IdStart As String) As Control
        Dim controls As New Stack(Of Control)(root.Controls.Cast(Of Control)())
        While controls.Count > 0
            Dim currentControl As Control = controls.Pop()
            If currentControl.ID.StartsWith(IdStart, StringComparison.InvariantCultureIgnoreCase) Then
                Return currentControl
            End If
            For Each child As Control In currentControl.Controls
                controls.Push(child)
            Next
        End While
        Return Nothing
    End Function
End Module

它返回以给定ID部分开头的第一个控件。所以很可能你弄错了。如果使用正确的NamingContainer而不是作为root使用页面,则不太容易出错。

因此第2部分基本上是一个空字符串。你为什么不知道完整的ID?是的,这是一个很好的解决方案,但我不想检查所有的控件,因为有很多。我需要得到控制,而不需要通过所有的控制page@burk15当前位置请再读一遍我的最后一句话如果知道父控件,请将其用作根控件。但是请注意,如果在GridView中搜索时没有正确的GridViewRow,则会出现问题。ASP.NET webforms也会执行相同的操作来查找控件,并在其中循环。@ps2goat:ASP.NET FindControl不会递归搜索控件。子控件与我的方法一样。只搜索当前的NamingContainer。@TimSchmelter,我不是说你的代码错了,我的意思是没有必要担心循环。您认为ASP.NET仅搜索第一级子级是正确的。
Dim control As Control = Page.FindControlPart(part1)