2

我们有一些代码旨在在 ASP.NET Web 表单页面及其值上构建控件的键/值对。我们使用“控件”集合和递归来构建这个键/值对。

唯一的问题是 ascx 控件似乎没有出现在“控件”集合中。相反,我们得到了 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 控件的列表,或者更好的是包含两种类型的不同集合?

谢谢

汉斯

4

2 回答 2

1

据我所知,ASCX 控件包含在Controls集合中。

我已经创建了一个继承它的类System.Web.UI.WebPage,它将遍历其中的所有控件this.Controls,它包括所有的 ASCX 类。

于 2010-06-28T17:11:33.073 回答
1

.ascx 控件确实出现在控件集合中。

查看您的代码,我想知道这是否可能是 GetValueFromControl 函数的问题 - 也许它对于 .ascx 控件无法正常运行,或者您正在寻找的任何值都没有设置?或者,您的真实代码中的等效递归函数可能只是将叶节点添加到_ControlValues,并跳过带有子节点的节点?

于 2010-06-28T20:19:37.440 回答