嵌套的母版页和继承

时间:2014-01-17 10:38:20

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

我创建了一个嵌套的母版页。父母版页A继承自System.Web.UI.MasterPage。子母版页B继承自A。

然后我创建了一个使用母版页B的Web内容页面C,并继承自System.Web.UI.Page。

从Web内容页面C我可以从两个母版页中访问变量和方法。但问题在于访问父母版页面变量和方法。

问题是正在引发NullReferenceException。变量和方法尚未初始化。

什么是可能的解决方案?

public partial class ParentMasterPage : System.Web.UI.MasterPage
{
    internal Button btn_Parent
    {
    get { return btn; }
    }
}

public partial class ChildMasterPage : ParentMasterPage
{
    internal Button btn_Child
    {
        get { return btn; }
    }
}

public partial class WebContentPage : System.Web.UI.Page
{
    protected override void OnInit(EventArgs e)
    {
        Button tempA = Master.btn_Child; //WORKS
        Button tempB = Master.btn_Parent; //NULL REFERENCE EXCEPTION
    }
}

2 个答案:

答案 0 :(得分:1)

嵌套母版页不继承它的父母版页类型。相反,它编写本身,使NestedMasterType.Master属性是父母版页的实例。 NestedMasterType类型仍然继承自System.Web.UI.MasterPage

所以这是对的:

public partial class ChildMasterPage : System.Web.UI.MasterPage

这是错误的:

public partial class ChildMasterPage : ParentMasterPage

然后您将访问(子)主页(使用子主文件)的(父)主文件,如下所示:

Button tempA = ((ChildMasterPage)this.Master).btn_Child; 
Button tempB = ((ParentMasterPage)this.Master.Master).btn_Parent;

注意:这个答案假定您的意思是ChildMasterPage是一个嵌套的母版页,它使用类似于下面的Master指令:

<%@ Master MasterPageFile="~/ParentMasterPage.Master" Inherits="ChildMasterPage"...

答案 1 :(得分:0)

A Page只引用它的立即主数据及其变量,您必须将对象图遍历到主母版页,即

var parentMaster = (ParentMasterPage)Page.Master.Master;
parentMaster.SomeProperty = ...;

或者,您可以通过在ChildMasterPage中实现相同的属性来缩小2之间的差距,即

internal Button btn_Parent
{
    get { return ((ParentMasterPage)Master).btn_Parent; }
}

这意味着您目前拥有的代码可以正常工作,但是,它有点挫败了拥有主母版页的目的。