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

Asp.net 使用自定义基类访问母版页会导致页面无法呈现,asp.net,c#-4.0,master-pages,Asp.net,C# 4.0,Master Pages,我在使用ASP.NET/C#4.0时遇到了一个非常奇怪的问题,我一直无法找到答案。我的子母版页有一个自定义母版页,我的页面有一个自定义母版页类。我的问题是,如果我从我的任何页面访问主成员,页面内容本身不会被呈现,只会呈现主页面 因此,以不同的方式重述: “母版页”继承System.Web.UI.MasterPage 使用“母版页”的“嵌套母版”继承System.Web.UI.MasterPage “WebForm”使用“嵌套主控”,WebForm将继承继承System.Web.UI.Page的C

我在使用ASP.NET/C#4.0时遇到了一个非常奇怪的问题,我一直无法找到答案。我的子母版页有一个自定义母版页,我的页面有一个自定义母版页类。我的问题是,如果我从我的任何页面访问主成员,页面内容本身不会被呈现,只会呈现主页面

因此,以不同的方式重述: “母版页”继承System.Web.UI.MasterPage 使用“母版页”的“嵌套母版”继承System.Web.UI.MasterPage

“WebForm”使用“嵌套主控”,WebForm将继承继承System.Web.UI.Page的CustomPageBase

当CustomBaseMaster访问此.Master时,它不会呈现Web表单的内容,只呈现“嵌套的主控”和“母版页”内容。我试过只读一个成员,写一个成员,读写都可以,甚至不访问成员,只调用Debug.WriteLine(this.Master)

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

不幸的是,我的谷歌搜索查询显示了如何访问母版页的公共成员的结果。但我找不到任何东西可以解释为什么在访问母版页时,会导致页面内容不显示


有没有人看到过这样的情况,并能提供一些建议?Google帮不上什么忙,搜索了几个小时。

好的,当使用类顶部的页面装饰器时,它会在PreInit完成之前分配页面类的属性。我使用ILSpy查看当您访问页面的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;
            }
        }
    }
}