2013-01-09 20 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中创建列表。