2012-04-23 114 views
1

我有一個masterpage(myMaster)我有一個變量(讓我們調用myInteger)我想在外部類中訪問。從母版頁獲得價值到類

通常我只是做在我的aspx:<%@ VirtualPath的MasterType = 「myMaster.master」 %>

,然後我可以訪問它在我的代碼做背後:Master.myInteger ...

我在這裏的問題是,我想訪問它的另一個類(那裏沒有的.aspx)

我試着做 Master.MasterPageFile = 「〜/ myMaster.master」 Master.AppRelativeVirtualPath =「myMaster。主「

但是Master.myInteger未被識別。

我不知道我想要做什麼是可能的...任何想法得到這個變量?

+0

在別處定義財產。你試圖做的不是最佳實踐。 – Khan 2012-04-23 14:48:16

回答

0

從外部類,嘗試這樣的事情:

var page = HttpContext.Current.Handler as Page; 
if (page != null) 
{ 
    var value = ((MasterPageName)page.Master).SomeProperty; 
} 

如果你沒有從外部類訪問母版頁,你可以使用反射來訪問屬性或方法:

var page = HttpContext.Current.Handler as Page; 
if (page != null) 
{ 
    var value = page.Master.GetType().GetProperty("SomeProperty").GetValue(page.Master, null); 
} 
+0

Thx但我不確定明白(英語不是我的母語:p)。我應該在哪裏寫<%@ MasterType VirtualPath =「〜/ Themes/Default.master」%>?而virtualPath應該包含哪些內容? – blop 2012-04-23 14:56:40

+0

在頁面指令中(位於最上方),在頁面聲明下方:'<%@ Page Language =「C#」...%>' – 2012-04-23 15:16:41

4

所以你需要引用一個MasterPage的屬性從一個類不會繼承Page

我會建議使用一個屬性或構造函數用這個值初始化這個類。但是,如果你真的需要這種方式,你可以試試下面的方法,它使用HttpContect.Current.Handler

// works even in static context 
static void foo() 
{ 
    int myInteger = -1; 
    var page = System.Web.HttpContext.Current.Handler as System.Web.UI.Page; 
    if(page != null) myInteger = ((myMaster)page.Master).myInteger; 
} 

注意,這是容易出錯,也難以您的類與MasterPage聯繫。

+0

Thanx,但我不確定如何使用屬性...(我開始用.Net ...)。你能更具體嗎? – blop 2012-04-23 15:10:24

+0

@blob:很難說,因爲你沒有顯示你的課程。例如從一個頁面:'Foo foo1 = new Foo(); foo1.myInteger =((myMaster)page.Master).myInteger;'(假設你的類有一個myInteger屬性)。 – 2012-04-23 15:17:34