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;
这是可行的,因为 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;
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";
}
我试图从子页面访问我的 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;
这是可行的,因为 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;
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";
}