在母版页中,我有一个面板,我想从母版页的代码中添加控件,如下所示:
var cphRegionName = this.Page.FindControl("pnlLeft") as Panel;
cphRegionName.Controls.Add(uc);
但是我收到了这个错误:
对象引用未设置为cphRegionName.Controls.Add(uc)的对象实例;
我已经尝试了所有可能的其他方法,但得到了相同的错误。
我使用FindControl访问PANEL的原因是面板的名称是动态的(“pnlLeft”),从数据库读取。
答案 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