从另一个usercontrol访问不同contentplaceholder中的usercontrol时出现问题

时间:2011-08-25 19:00:51

标签: c# asp.net master-pages

现在我知道这不适用于良好的设计实践,但是遗留代码中有一个需要修复的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?

提前致谢!

1 个答案:

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