现在我知道这不适用于良好的设计实践,但是遗留代码中有一个需要修复的bug,所以我将不得不忍受它。
场景是我有一组嵌套母版页(3深),称之为Base>模板> 2Col。我在2Col级工作。顾名思义,2Col母版页有两个内容占位符,MainContent和SideContent。
我在MainContent中有用户UserControl需要引用SideContent中的另一个UserControl。
ContentPlaceHolder ph = (ContentPlaceHolder)this.Page.Master.FindControl("SideContent");
MyUserControl uc = (MyUserControl )ph.FindControl("MyUserControl1");
我不确定为什么这不起作用,我调试时的intellisense会让我认为ContentPlaceHolder在那里,但第一行总是返回null?
提前致谢!
答案 0 :(得分:2)
由于母版页的嵌套,您需要访问正确的母版页,如下所示:
ContentPlaceHolder ph = (ContentPlaceHolder)Parent.Parent.FindControl("SideContent");
或者,如果您需要在Master上找到页面上的任何控件,请使用以下命令:
ContentPlaceHolder ph = (ContentPlaceHolder)FindControl(Page.Master, "SideContent");
...
private Control FindControl(Control parent, string id)
{
foreach (Control child in parent.Controls)
{
string childId = string.Empty;
if (child.ID != null)
{
childId = child.ID;
}
if (childId.ToLower() == id.ToLower())
{
return child;
}
else
{
if (child.HasControls())
{
Control response = FindControl(child, id);
if (response != null)
return response;
}
}
}
return null;
}