【问题标题】:How to count the number of user controls that I have in a page?如何计算我在页面中拥有的用户控件的数量?
【发布时间】:2013-01-16 01:27:19
【问题描述】:

我有一个包含 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">

【问题讨论】:

  • 为什么需要统计用户控件的数量?

标签: asp.net user-controls


【解决方案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++;
    }
   }
}

我已经测试并为我工作。

【讨论】:

    【解决方案2】:

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

    您可能需要递归到控件中的控件(可能到面板中?)。

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      • 2013-11-11
      • 2014-01-11
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      • 2022-12-18
      相关资源
      最近更新 更多