C# 循环浏览页面上的所有用户控件

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

希望遍历页面上存在的所有用户控件并获取它们的ID。如何操作?

要获得每个用户控件,必须测试控件的类型:

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
派生控件?