C# 循环浏览页面上的所有用户控件
希望遍历页面上存在的所有用户控件并获取它们的ID。如何操作?要获得每个用户控件,必须测试控件的类型:C# 循环浏览页面上的所有用户控件,c#,asp.net,C#,Asp.net,希望遍历页面上存在的所有用户控件并获取它们的ID。如何操作?要获得每个用户控件,必须测试控件的类型: foreach(Control control: Page.Controls) { //do something with control object } 编辑:我修改了我的示例,以递归方式遍历所有控件: 方法 public void GetUserControls(ControlCollection controls) { foreach (Control ctl in
foreach(Control control: Page.Controls)
{
//do something with control object
}
编辑:我修改了我的示例,以递归方式遍历所有控件:
方法
public void GetUserControls(ControlCollection controls)
{
foreach (Control ctl in controls)
{
if (ctl is UserControl)
{
// Do whatever.
}
if (ctl.Controls.Count > 0)
GetUserControls(ctl.Controls);
}
}
GetUserControls(Page.Controls);
呼叫
public void GetUserControls(ControlCollection controls)
{
foreach (Control ctl in controls)
{
if (ctl is UserControl)
{
// Do whatever.
}
if (ctl.Controls.Count > 0)
GetUserControls(ctl.Controls);
}
}
GetUserControls(Page.Controls);
这应该起作用:
var listOfUserControls = GetUserControls(Page);
...
public List<UserControl> GetUserControls(Control ctrl)
{
var uCtrls = new List<UserControl>();
foreach (Control child in ctrl.Controls) {
if (child is UserControl) uCtrls.Add((UserControl)child);
uCtrls.AddRange(GetUserControls(child);
}
return uCtrls;
}
var listOfUserControls=GetUserControls(第页);
...
公共列表GetUserControls(控件ctrl)
{
var uCtrls=新列表();
foreach(ctrl.Controls中的控件子级){
if(child是UserControl)uCtrls.Add((UserControl)child);
uCtrls.AddRange(GetUserControls,子控件);
}
返回UCTRL;
}
我创建了一个扩展方法来实现这一点,它非常适合LINQ
<Extension()>
Public Function DecendentControls(ParentControl As Control) As Control()
Dim controls As New List(Of Control)
For Each myControl As Control In ParentControl.Controls
controls.Add(myControl)
controls.AddRange(myControl.DecendentControls)
Next
Return controls.ToArray
End Function
这是WinForms、WPF还是ASP.NET?我怀疑是后者,但你永远不知道。你说的“用户控件”是指托管控件还是具体的用户控件(.ascx)?@ChrisF:你猜对了!ASP.NET是@CAbbott:.ascxb,但它会遍历所有控件。如何区分用户控件。GetType()?控件可以嵌套,因此您需要一个递归函数来循环所有控件。if(curControl是UserControl)从来都不是真的。我确实在页面上有一个UserControl。我已经在一个页面上测试了这一点,其中我有一个用户控件,它找到了它。您是否从
System.Web.UI.UserControl
派生控件?