2016-11-14 9 views
0

Я пытаюсь получить доступ к публичному классу в файле кода MasterPage с дочерней страницы, но не могу заставить его работать. Я попытался использовать тот же метод, что и доступ к общедоступному 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; 

Это работает, потому что 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; 
+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";  
}