在 foreach 中看不到我的用户控件

Can't see my user controls in a foreach

我似乎无法在 for-each 期间找到我的自定义用户控件。

这是一个自定义用户控件,这是我的代码:

            <uc2:MetaTag runat="server" id="MetaTag" SystemCode="TEXT" Text="test" />

但它确实找到了我所拥有的文字控件。

        foreach (Control controlItemFound in Page.Controls)
        {
            Response.Write("Control Found: " + controlItemFound.GetType() + "<br );
            if(controlItemFound is MetaTag)
            {
                MetaTag ctrl = (MetaTag)controlItemFound;

                ctrl.Text = Server.HtmlDecode("MetaTag FOUND!!!");
            }
            if (controlItemFound is LiteralControl)
            {
                LiteralControl ctrl = (LiteralControl)controlItemFound;

                ctrl.Text = Server.HtmlDecode("Server Text!");
            }
        }

Page.Controls 只会让您直接访问页面 Class 中的控件。它不包括嵌套在其他控件中的控件。 例如,您可能已添加到页面(嵌套在 Form 标记中)的 Literal 和 Meta 控件不会包含在 Page.Controls 集合中。

至于您在 Page.Controls 集合中识别的 LiteralControl,这将是 ASP.NET 框架添加的 LiteralControl 之一。

尝试遍历 Meta 控件容器的控件 属性。 如果 Meta 控件是 Form 的直接子控件(Form 标记),

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <uc2:metatag runat="server" id="MetaTag" systemcode="TEXT" text="test" />
    </form>
</body>
</html>

然后使用下面的代码,其中form1是Form的名字

foreach (Control controlItemFound in this.form1.Controls)
{
}