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

时间:2015-10-16 01:25:53

标签: asp.net custom-controls

我似乎无法在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!");
            }
        }

1 个答案:

答案 0 :(得分:1)

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

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

尝试迭代Meta控件容器的Controls属性。 如果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)
{
}