我们有一些代码用于在ASP.NET webforms页面上构建一对键/值控件对及其值。我们使用“Controls”集合和递归来构建这个键/值对。
唯一的问题是ascx控件似乎没有出现在“Controls”集合中。相反,我们得到了ascx上的控件。
类似于以下代码:
protected override void OnLoad(EventArgs e)
{
GetControls(this);
}
protected void GetControls(System.Web.UI.Control ctl)
{
foreach (Control subCtl in ctl.Controls)
{
GetControls(subCtl);
string value;
if (GetValueFromControl(subCtl, out value))
{
_ControlValues.Add(subCtl.ClientID, value);
}
}
}
subCtl永远不是ascx控件。有没有办法在页面上获取ascx控件列表,或者更好的是包含这两种类型的不同集合?
由于
汉斯
答案 0 :(得分:1)
据我所知,ASCX控件包含在Controls
集合中。
我创建了一个继承System.Web.UI.WebPage
的类,它将遍历this.Controls
中的所有控件,并且它包含所有ASCX类。
答案 1 :(得分:1)
.ascx控件确实出现在控件集合中。
查看你的代码,我想知道这可能是GetValueFromControl函数的一个问题 - 也许它对.ascx控件没有正常运行,或者你正在寻找的任何值都没有设置?或者,真实代码中的等效递归函数可能只是将叶节点添加到_ControlValues,并跳过带有子节点的节点?