2012-03-27 42 views
0

我想知道是否有可能從該頁面上的用戶控件訪問頁面的全局變量。.net - 從用戶控件訪問頁面全局變量

public partial class index : System.Web.UI.Page 
    { 
    FormsIdentity id = (FormsIdentity)User.Identity; 
    string custID = "some guid"; 
    string accID = "some guid"; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
    } 

這只是一個例子,我實際的全局變量更復雜的自定義配置對象,但它應該是相同的。

我想訪問用戶控件中的變量。這會很有幫助,因爲我需要在頁面和用戶控件上使用相同的對象,而且我不希望在內存中檢索並存儲兩次。

任何人都知道是否/如何做到這一點?謝謝!

+8

由於用戶控件是爲了進行封裝和可重用的,你應該通過他們需要放進去任何數據,沒想到從其父頁面發送數據(S) 。 – 2012-03-27 17:37:41

回答

2

是的,你可以。它被稱爲將變量傳遞給用戶控件。確保它不止一次地存儲在內存中,但這是保持關注點分離和制定可重用控制的「價格」。

如果項目是常量,您可以將它們存儲爲真實全局變量並通過global.asax中的靜態方法進行訪問。如果在請求的基礎上,這不會以簡單的方式工作,但您可以設計它。

現在,你不想在內存中存儲兩次評論。我不擔心這一點,因爲它是少量信息(1),尤其是因爲它只會持續請求(2)。不完全如此,因爲GC不會立即觸發。

2

如果您依賴於多個控件上的這些信息,最好有一個從UserControl繼承的UserControlBase,然後使您的控件從UserControlBase繼承。對Page類做​​同樣的事情。然後,您可以將該屬性添加到您的BasePage。要在UserControlBase只是做參考......

protected UserInfo UserInfo 
{ 
    get 
    { 
     return ((BasePage)this.Page).UserInfo; 
    } 
}