我已经做了一些关于动态控件和ViewState的研究。为什么即使添加到Page_Load中,ASP.NET动态控件也能保持ViewState?
我读到,为了保持ViewState的动态控制,你必须将它添加到Page_Init事件中。这是有道理的,因为PageLifeCycle是:
- 初始化。
- LoadViewState。
- LoadPostbackData。
- 加载。
- RaisePostbackEvent。
- SaveViewState。
- 渲染。
但我做了一个测试应用程序,我发现即使我在Page_Load事件中添加控件而不是之后,ViewState和属性值也会保留。从此我只发现矛盾的信息。有人说这些控件可能赶上PageLifeCycle,其他人说你必须将它们添加到Page_Init中。有人能为我澄清这一点吗?
而且MSDN中,我发现:
注意您可以用在 Page_Load事件处理程序加载你的控制和妥善维护视图状态脱身。它 全部取决于您是否以编程方式设置 动态加载的控件的任何属性,如果是,则当您使用 时,会相对于Controls.Add(dynamicControl)行进行此操作。对此的深入讨论有点超出了本文的讨论范围,但 可能起作用的原因是因为控件属性的Add()方法递归地将父视图的状态加载到子视图中,即使是 ,尽管加载视图状态舞台已经过去了。
但我并不完全理解这个,所以我希望有人能解释它。先谢谢你。