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

本文关键字:添加 控件 代码 何找 一个 | 更新日期: 2023-09-27 18:06:29

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

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

但是我得到这个错误:

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

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

我使用FindControl访问PANEL的原因是PANEL的名称是动态的("pnlLeft"),从Database读取

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

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

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