从子页访问母版页中的公共类

本文关键字:母版页 访问 | 更新日期: 2023-09-27 18:17:56

我正在尝试从子页面访问我的 MasterPage 代码文件中的公共类,但无法使其正常工作。我尝试使用与访问公共 int 相同的方法,如下所示,但子页面无法识别任何类项。

母版页.cs

private int _Section;
public int  Section
{
    get{return _Section;}
    set{_Section = value;}
}
public class HeaderPanel
{
    private bool _Visible = true;
    public bool Visible
    {
        get { return _Visible; }
        set { _Visible = value; }
    }
    private string _Theme;
    public string Theme
    {
        get { return _Theme; }
        set { _Theme = value; }
    }
    public HeaderPanel(bool Visible, string Theme)
    {
        this.Visible = Visible;
        this.Theme = Theme;
    }
}

默认.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
    Master.Section = 1; // This works
    Master.HeaderPanel.Visible = true; // This doesn't work
    Master.HeaderPanel.Theme = "Dark"; // This doesn't work       
}

我收到的错误消息是:
"标题面板":无法通过表达式引用类型

从子页访问母版页中的公共类

Master.Section = 1;

这是有效的,因为MasterDefault上的属性,并且该属性是MasterPage的实例。 您只需在该实例上设置Section值。

Master.HeaderPanel.Visible = true;

这是行不通的,因为虽然Master仍然是同一个实例,但HeaderPanel是一种类型,而不是任何实例。 因此,您正在尝试在该类型上静态设置Visible

<小时 />

如果您打算将其static,请将其设为static

private static bool _Visible = true;
public static bool Visible
{
    get { return _Visible; }
    set { _Visible = value; }
}

并通过类型而不是实例访问它:

MasterPage.HeaderPanel.Visible = true;
<小时 />

另一方面(可能更有可能?(,你不是故意要static,那么你需要一个MasterPage实例上的HeaderPanel类型的实例。 因此,在MasterPage中,您将为此创建一个属性:

private HeaderPanel _header = new HeaderPanel();
public HeaderPanel Header
{
    get { return _header; }
    set { _header = value; }
}

然后,您可以通过该属性访问它:

Master.Header.Visible = true;
private int _Section;
public int  Section
{
    get{return _Section;}
    set{_Section = value;}
}
//define your header panel as property 
public HeaderPanel Header {Get;Set;}

然后你可以按如下方式使用它

protected void Page_Load(object sender, EventArgs e)
{
    Master.Section = 1; // This works
    Master.Header.Visible = true; 
    Master.Header.Theme = "Dark";       
}