这是微软的一篇文章(适用于.NET 1.0 / 1.1):
HOW TO: Dynamically Create Controls in ASP.NET:
Note When you create dynamic controls
on a Web Form,you must create the
controls and add them to the controls
collection in either the Page_Init
event handler or the Page_Load event
handler. Otherwise,the controls may
not behave as expected.
但是,在这里的一些帖子中,似乎以上情况不再是这样了. Page_Load中添加的控件似乎适用于其他所有人.部分帖子包括:
creating dynamic control in asp.net
Viewstate – utter confusion.
我自己尝试过,虽然我没有做足够的测试以消除任何意外行为,但确实有效.
Page_Load是一个添加动态控件的安全阶段吗?或者仅适用于.NET 2.0及更高版本?
解决方法
至于“危险” – 缺乏经验的用户可能会遇到一些问题,因此建议您在Page_Init或之前添加它们. (请注意,PreInit事件仅适用于页面本身,而不适用于母版页或子控件).在我的头顶(我敢肯定可能会有更多):
>默认情况下,viewstate按位置加载.也就是说,它会忽略控件ID,并在加载视图状态时仅考虑树中的控件放置.如果在序列化视图状态时存在动态控件,但在反序列化时不存在,则错误的视图状态项可能会分配给错误的控件,从而导致异常.这可以通过某些设置进行更改,但我现在懒得搜索它们.>由于动态控件添加到页面时会出现“提速”,因此某些事件的顺序可能是意外的.例如,如果在Page_PreRender事件中向页面添加TextBox控件,则TextBox的Changed事件将在那里发生.如果你的事件处理程序代码依赖于在PreRender之前与其余事件发生的事件,那么你就搞砸了.