2009-11-04 71 views
8

使用LoadControl(字符串路径)以编程方式添加用户控件时,在用户控件的页面生命周期中,它是否使用其视图状态初始化其子控件?ASP.NET:Viewstate并以编程方式添加用户控件

我在问这个问题,因为我的一个用户控件被程序加载了一个TextBox控件,它没有在Page_Load事件的PostBack上被ViewState初始化/加载(这不是普通的情况。 aspx页面,因此我的困惑)。总的来说,我需要从Textbox控件中检索值。

感谢

回答

11

的ViewState Page_Load事件之前加载。如果您希望您的控件能够与ViewState一起使用,则需要加载该控件并将其添加到通常位于PreInit上的事件—之前的页面中。

生命周期参考这里:
http://msdn.microsoft.com/en-us/library/ms178472.aspx?ppud=4

阅读说明为Pre Load事件,立即之前页面加载:如果您需要在您的网页上进行处理

使用这个事件或在Load事件之前进行控制。

在Page实例引发此事件之前,它会为其自身和所有控件()加载视图状态,然后处理包含在请求实例中的任何回发数据。

因此,通过预加载时间已经太晚了。另外,PreInit事件的描述特别提到它是“创建或重新创建动态控件”的地方。

+0

谢谢!在相关说明中,我以编程方式添加的用户控件发生在另一个正在声明性加载的用户控件中。这个声明的父级用户控件的PreInit事件不会被触发(所以方法'protected void Page_PreInit(object sender,EventArgs e)'不会被调用)。 你知道为什么Page_PreInit不会在这个声明的用户控件中被调用吗? – burnt1ce 2009-11-04 17:37:16

+0

控件本身没有预初始化,因为控件页生命周期事件是从页面调用的,并且在PreInit点上,控件还没有完全准备好。改用Init。 – 2009-11-04 17:45:01

+0

非常感谢。你的建议救了我。 =) – burnt1ce 2009-11-05 14:51:11

相关问题