2016-11-14 106 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";  
} 
相關問題