繁体   English   中英

如何找到面板并通过其背后的代码对其添加控件

[英]How to find a panel and add control to it from it's code behind

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

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

但是我得到这个错误:

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM