如何计算我在页面中拥有的用户控件的数量?

时间:2013-01-31 20:16:37

标签: asp.net user-controls

我有一个包含5个用户控件的页面。我想用它们做更多的事情,但就目前而言,我只想用下面的方法来计算它们。

void btnFormSave_Click(object sender, EventArgs e)
{
  int i = 0;
  ControlCollection collection = Page.Controls;
  foreach (Control ctr in collection)
  {
    if (ctr is UserControl)
    {
      i++;
    }
   }
}

当我调试此代码时,i = 1,控件是主页面(我不知道母版页是用户控件)。

如何计算页面上的用户控件?

修改

这是我的内容占位符标记。

<asp:Content ID="cntMain" runat="Server" ContentPlaceHolderID="ContentMain">

2 个答案:

答案 0 :(得分:1)

编辑:用以下内容替换我原来的非基础答案。

您可能需要递归到控件中的控件(可能进入Panel?)。

http://msdn.microsoft.com/en-us/library/yt340bh4(v=vs.100).aspx

  

此示例仅查找Page对象中包含的控件   作为页面的直接子项的控件。它找不到   作为控件子级的文本框又是控件的子级   这页纸。例如,如果您向Panel添加了Panel控件,则为Panel   控件将是包含的HtmlForm控件的子控件   页面,它将在此示例中找到。但是,如果你那么   将TextBox控件添加到Panel控件(TextBox控件)中   示例不会显示文本,因为它不是子项   页面或作为页面子项的控件的页面。更多   以这种方式行走控制的实际应用将是   创建一个递归方法,可以调用它来遍历控件   遇到的每个控件的集合。

编辑2:在SO上添加指向递归控制搜索示例的链接。

使用LINQ的示例:https://stackoverflow.com/a/253962/704808

传统示例:https://stackoverflow.com/a/4955836/704808

答案 1 :(得分:1)

您只需要改变寻找的位置:

void btnFormSave_Click(object sender, EventArgs e)
{
  int i = 0;
  // here, look inside the form, and not on page.
  ControlCollection collection = Page.Form.Controls;
  foreach (Control ctr in collection)
  {
    if (ctr is UserControl)
    {
      i++;
    }
   }
}

我已经为我测试过了。