【发布时间】:2013-01-09 20:31:26
【问题描述】:
我正在开发一个项目,它有一个名为 Outer 的外部 UserControl,它执行一些逻辑来确定在其代码中静态加载哪个内部 UserControl。有几个内部控件,我们称它们为 Inner1、Inner2 和 Inner3。
所有内部控件都继承外部控件,所以:
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
}
现在,这是我的问题:如果我在 Page_Load 或 Outer 中调用 DoStuff(),我希望它运行,将 foo 设置为一个列表,foo 不再是 null。然后当任何内部控件的Page_Load运行时,每个控件都可以访问foo,而不是null。
这不会发生。相反,在Inner1、Inner2 或Inner3 中的任何Page_Load 中——当我访问foo 时,它始终是null。但是,当页面在浏览器中加载时,Outer 的Page_Load 完全执行,然后InnerX 的Page_Load 加载,所以我很困惑为什么foo 再次是null调用内部控件的Page_Load,我知道它在外部控件之后运行(设置foo)。
如果我要从外部Page_Load 中删除DoStuff() 调用并进入每个单独的内部Page_Load,它工作正常。不过我想避免这种情况。
【问题讨论】:
-
仅供参考,就生命周期或方法顺序而言,用户控件没有什么特别之处。它们与所有其他类型的控件相同。
标签: c# asp.net inheritance webforms page-lifecycle