我有一个包含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">
答案 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上添加指向递归控制搜索示例的链接。
答案 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++;
}
}
}
我已经为我测试过了。