使用自定义基类访问母版页会导致页面无法呈现

时间:2012-07-10 00:59:32

标签: asp.net c#-4.0 master-pages

我使用ASP.NET / C#4.0有一个非常奇怪的问题,我无法找到答案。我有一个用于我的子母版页的自定义基本母版页,以及一个用于我的页面的自定义基页类。我的问题是,如果我从任何一个页面访问Master成员,页面内容本身就不会被渲染,只有母版页。

所以,以不同的方式回顾: “Master Page”继承System.Web.UI.MasterPage   使用“母版页”的“嵌套大师”继承System.Web.UI.MasterPage

“WebForm”使用“嵌套主”,WebForm继承了继承System.Web.UI.Page

的CustomPageBase

当CustomBaseMaster访问this.Master时,它不会呈现webform的内容,只会呈现“嵌套主页”和“母版页”内容。我只是在阅读成员,编写成员,阅读和写作,甚至不访问成员,只是调用Debug.WriteLine(this.Master)

时尝试过它

如果它有帮助,我在“WebForm”上使用页面装饰器,需要更新“母版页”上的控件

不幸的是,我的Google搜索查询会显示有关如何访问母版页的公共成员的结果。但是,我找不到的任何内容都有助于解释为什么在访问母版页时会导致页面内容无法显示。

有没有人见过这样的话可以提供任何建议?谷歌没有太多帮助,现在已经搜索了几个小时。

1 个答案:

答案 0 :(得分:0)

好的,当使用类顶部的Page装饰器时,它会在PreInit完成之前分配页面类的属性。我使用ILSpy来查看访问页面的Master属性时发生的情况,如果在创建Master页面之前访问它(内部为null),并且在调用所有PreInit方法之前,它将创建一个新的母版页并使用该内容。有点烦人。无论如何,我的解决方案是在获取和设置它们时不使属性冒泡到父母版页的值,但是在我的基页和基本主类中重载了OnLoad事件,并在那里设置了父项的属性。

所以,而不是这样做:

namespace MyWebsite
{
    public abstract class MyPageBase : Page
    {
        public int PropertyName
        {
            get
            {
                return ((MyMaster)this.Master).RatePageId;
            }
            set
            {
                ((MyMaster)this.Master).RatePageId;
            }
        }
    }
}

我这样做了:

namespace MyWebsite
{
    public abstract class MyPageBase : Page
    {
        public int? PropertyName
        {
            get;
            set;
        }

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            if (PropertyName != null)
            {
                ((MyMaster)this.Master).PropertyName = PropertyName.Value;
            }
        }
    }
}