我无法获得自定义控件来更改母版页控件的呈现

时间:2013-10-10 11:25:03

标签: c# asp.net custom-controls

我有一个带占位符控件的母版页。

我有一个继承自母版页的页面。

然后我有一个自定义控件显示在页面上,这个自定义控件有一个强制转换到母版页,所以我可以访问占位符控件来打开和关闭可见性。当我在调试器中观察它时,一切都按预期工作,但占位符控件无法关闭它的可见性。

我觉得这可以按照事件触发的顺序来做。在主页已经呈现之后,页面上的自定义控件中的任何代码都会被触发。

是否有人知道如何影响此页面的呈现方式,以便自定义控件可以打开和关闭占位符?

控件中的代码如下所示;

protected override void Render(HtmlTextWriter writer)
{
    var master = this.Page.Master as Site;
    if (master != null)  // cast failed, your master is a different type
    {
        master.NavBar.Visible = false;
    }
    // other stuff
}

2 个答案:

答案 0 :(得分:0)

在您的页面中包含MasterType标记,这样您就不需要对页面进行类型转换。直接可以获得Master实例。

答案 1 :(得分:0)

此问题的解决方案是控件,母版页和页面被触发的顺序,它忽略了自定义控件上的设置。解决方案是将此功能添加到OnPreRender(EventArgs e)方法的自定义控件上。

protected override void OnPreRender(EventArgs e)
        {
            var master = this.Page.Master as Site;
            if (master != null)  // cast failed, your master is a different type
            {
                var progressShown = master.FindControl("ProgressShown");
                if (progressShown != null)
                {
                    master.NavBar.Attributes.Add("class", "test");
                }
            }

            base.OnPreRender(e);
        }