1

在母版页中,我有一个面板,我想从后面的母版页代码中添加控件,如下所示:

var cphRegionName = this.Page.FindControl("pnlLeft") as Panel;
cphRegionName.Controls.Add(uc);

但我收到此错误:

对象引用未设置为 cphRegionName.Controls.Add(uc) 处的对象实例;

我已经尝试了所有可能的其他方法,但得到了同样的错误。

我使用 FindControl 访问面​​板的原因是面板的名称是动态的(“pnlLeft”),从数据库中读取。

4

2 回答 2

3

FindControl方法不能递归工作。这意味着除非您的控件直接添加到页面中,否则它不会找到它。

如果您知道容器控件,请在该控件上使用 FindControl,而不是在 Page 上使用。

如果你不这样做,你可以使用这样的函数来解决问题

private Control FindControlRecursive(Control root, string id) 
{ 
    if (root.ID == id)
    { 
        return root; 
    } 

    foreach (Control c in root.Controls) 
    { 
        Control t = FindControlRecursive(c, id); 
        if (t != null) 
        { 
            return t; 
        } 
    } 

    return null; 
} 
于 2013-03-30T06:22:05.933 回答
0

FindControl 不是递归的,因此您必须确保在正确的容器上调用它。看起来面板不是基于空引用在根目录定义的。尝试在面板的父级上调用 FindControl

于 2013-03-30T06:19:34.547 回答