2013-01-09 18 views
1

我的工作是有一個叫做UserControl,做一些邏輯,以確定哪些內部UserControl在其代碼中靜態加載項目之間。有幾個內部控制,我們姑且稱之爲Inner1Inner2,並Inner3方法令家長和內部用戶控件

ALL內控制繼承外控制,所以:

Outer : System.Web.UI.UserControl

Inner1 : Outer

Inner2 : Outer

Inner3 : Outer

Outer.cs我有一些領域和方法,內部控制訪問,如

List<string> foo = null; 

protected void Page_Load(object sender, EventArgs e) 
{ 

} 

public void DoStuff() 
{ 
    foo = MethodToPopulateFoo(); // this always works and returns a List<string> even if its empty 
    // other stuff here 
} 

現在,這裏是我的問題:如果我的OuterPage_Load調用DoStuff()我希望它運行,設置foo到列表和foo變得不再null。然後的任何內部控制的Page_Load運行時,每一類又可以訪問foo和它不會null

這不會發生。相反,在Inner1Inner2,或Inner3任何Page_Load - 當我訪問foo它總是null。然而,當在瀏覽器加載頁面的OuterPage_Load完全執行,那麼InnerXPage_Load負荷,所以我很困惑,爲什麼foonull當我再次打電話內部控制的Page_Load我知道外後運行控制(設置foo)。

如果我要從外Page_Load中刪除DoStuff()來電,並進入每個內部Page_Load,它工作正常。我想盡量避免這種情況。內控制的

+0

僅供參考,在生命週期或方法順序方面沒有什麼特別的用戶控制。它們與所有其他類型的控制相同。 –

回答

0

Page_Load方法外控制的Page_Load之前被調用。但您仍然有幾個選項:

您可以使用Lazy初始化,例如,

List<string> _foo; 
List<string> Foo 
{ 
    get 
    { 
     if (_foo == null) 
     _foo = new List<string>(); 
     return _foo; 
    } 
} 

或者你在外部控制初始化富(每類應該初始化它自己的對象),並從Page_Load中不能訪問它,但是從Page_PreRender在你內心的控制。您也可以在Page_Init或Page_PreLoad中創建列表。