我正在尝试从子页面访问我的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':无法通过表达式引用类型
答案 0 :(得分:0)
Master.Section = 1;
这是有效的,因为Master
是Default
上的属性,该属性是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";
}