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