Asp.net vb.net通过id的一部分查找控件
我需要在一个页面中找到一个控件,但我不知道完整的ID。我只知道ID的一部分 我不想做的事情是这样的: 控件=页。FindControlpart1和part2Asp.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
其中,第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)