2016-11-14 115 views
0

我想从子页面访问母版页代码文件中的公共类,但无法使其工作。我尝试使用与访问公共int相同的方法,如下所示,但子页面不能识别任何类项目。asp.net - 从子页面访问母版页中的公共类

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

看起来你试图访问'HeaderPanel'上的属性,就好像它们是'static'一样。你忘了让它们变成“静态”吗?或者忘记在'MasterPage'中创建一个类的实例? – David

回答

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,那么您需要MasterPage实例上的HeaderPanel类型的实例。因此,在MasterPage你创建一个属性:

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

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

Master.Header.Visible = true; 
+0

太棒了,谢谢。我知道我错过了一些东西! – Andrew

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