asp.net - 从子页面访问主页中的 public class

asp.net - Access public class in Masterpage from child page

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

MasterPage.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;
    }
}

Default.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       

}

我收到的错误信息是:
'HeaderPanel': 不能通过表达式引用类型

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,那么你需要一个实例HeaderPanelMasterPage 实例上键入。因此,在 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";       
}