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

本文关键字:控件 母版页 自定义控件 | 更新日期: 2023-09-27 18:34:48

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

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

然后,我有一个显示在页面上的自定义控件,

此自定义控件具有母版页的强制转换,因此我可以访问占位符控件以打开和关闭可见性。 当我在调试器中观看它时,一切都按预期工作,但占位符控件无法关闭其可见性。

我觉得这与事件的发生顺序有关。 页面上自定义控件中的任何代码似乎在母版页已呈现后触发。

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

控件中的代码如下所示;

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
}

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

在页面中包含 MasterType 标记,这样就不需要对页面进行字体处理。主,直接可以获取主实例。

此问题的解决方案是控件、母版页和页面的触发顺序,它忽略了自定义控件上的设置。 解决方案是将此功能添加到 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);
        }