如何找到一个面板并从它的代码后面添加控件

时间:2013-03-30 06:14:15

标签: c# asp.net .net master-pages findcontrol

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

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

但是我收到了这个错误:

  

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

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

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

2 个答案:

答案 0 :(得分:2)

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

如果您知道容器控件,请使用FindControl而不是页面。

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

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; 
} 

答案 1 :(得分:0)

FindControl不是递归的,所以你必须确保在正确的容器上调用它。它看起来不像是根据空引用在根目录中定义的。 尝试在面板的父级上调用FindControl