当使用LoadControl(字符串路径)以编程方式添加用户控件时,在用户控件的页面生命周期中,何时使用其viewstate初始化其子控件?
我问的是这个问题,因为我的一个用户控件正在以编程方式加载有一个TextBox控件,它没有被它在PageLoad事件上的PostBack上的viewstate初始化/加载(对于常规.aspx页面不是这种情况,因此我的困惑).总的来说,我需要从TextBox控件中检索值.
谢谢
解决方法
ViewState在Page_Load事件之前加载.如果您希望控件与ViewState一起使用,则需要加载它并在该事件之前将其添加到页面 – 通常在PreInit上.
生命周期参考在这里:
http://msdn.microsoft.com/en-us/library/ms178472.aspx?ppud=4
阅读Pre Load事件的描述,该事件紧接在Page Load之前:
Use this event if you need to perform processing on your page or control before the Load event.
Before the Page instance raises this event,it loads view state for itself and all controls, and then processes any postback data included with the Request instance.
因此,通过预加载时间已经太晚了.此外,PreInit事件的描述特别提到它是“创建或重新创建动态控件”的地方.