代码之家  ›  专栏  ›  技术社区  ›  Curtis White

webform中的构造函数?

  •  3
  • Curtis White  · 技术社区  · 14 年前

    我有一个ASP.NET webform,在这里我初始化了一个数组,其中的控件列表如下所示

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

    然后我把这些用在 页面加载 它们都是空的。我觉得这是一种奇怪的行为。有人能详细解释一下吗?我可以理解它们在构造函数中是空的,但是为什么在页面加载中使用它们时应该是空的呢。

    2 回复  |  直到 11 年前
        1
  •  1
  •   laktak    14 年前

    它们为空,因为控件尚未创建。

    看一看这个 ASP.NET Page Life Cycle Overview 以及Init事件。

        2
  •  0
  •   user52898 user52898    11 年前

    如果要“手动”添加控件,则需要在OnInit()中执行此操作,以便可以从LoadViewState()调用中为它们提供状态,该调用将在OnInit()之后发生。

    如果不知道需要添加多少控件,因为它是动态的,那么可以重写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()
            };
        }
    }