2010-06-28 103 views
3

我有一個ASP.NET Web窗體,我初始化一個列表控件數組在頁面上這樣webform中的構造函數?

FileUpload[4] = new FileUpload[4]; 
public myclass() 
{ 
fileUpload[0] = FileUpload1; 
fileUpload[0] = FileUpload2; 
...etc 
} 

然後我在頁面加載使用這些,他們都是空。這對我來說似乎是一種奇怪的行爲。有人可以詳細解釋嗎?我可以理解,它們在構造函數中是空的,但爲什麼它們應該在頁面加載時使用null。

回答

1

它們爲空,因爲控件尚未創建。請參閱ASP.NET Page Life Cycle Overview和Init事件。

+0

是的..我知道,但不應該如果它指向他們的頁面加載,他們應該初始化?這是讓我困惑的部分。 – 2010-06-28 18:35:59

+0

是的,他們將被初始化 - 但你的數組仍然包含舊的引用(空值)。 – laktak 2010-06-29 06:22:04

0

如果要「手動」添加控件,則需要在OnInit()中執行此操作,以便可以在緊接在OnInit()之後發生的LoadViewState()調用中爲它們指定狀態。

如果您不知道需要添加多少控件,因爲它是動態的,您可以重寫LoadViewState和SaveViewState。看到這個例子(編寫沒有Visual Studio):

public class MyPage : Page 
{ 
    class State 
    { 
     numberOfControls int 
     otherState object 
    } 

    override void LoadViewState(savedState object) 
    { 
     var myState = (State)savedState; 
     SetupMyControls(myState.numberOfControls); 
     base.LoadViewState(myState.otherState); 
    } 

    override object SaveViewState() 
    { 
     return new State 
     { 
      numberOfControls = GetNumberOfMyControls(), 
      otherState = base.SaveViewState() 
     }; 
    } 
}