asp.net - 从子页面访问Masterpage中的公共类

时间:2016-11-14 17:09:18

标签: c# asp.net master-pages

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

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':无法通过表达式引用类型

2 个答案:

答案 0 :(得分:0)

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,那么你需要一个HeaderPanel的实例在MasterPage实例上键入。所以在MasterPage中你要为它创建一个属性:

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

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

Master.Header.Visible = true;

答案 1 :(得分:0)

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";       
}