从子页访问母版页中的公共类
本文关键字:母版页 访问 | 更新日期: 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;
这是有效的,因为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
,那么你需要一个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";
}