我在Load事件中使用LoadControl方法相当广泛。但是我还没有发现任何问题,我担心MSDN documentation说的是什么:
将控件加载到容器控件中时,容器 提出所有添加的控件的事件,直到它赶上了 当前事件。但是,添加的控件无法赶上 回发数据处理。为了增加控制参与 回发数据处理,包括验证,控制必须 添加在Init事件中而不是Load事件中。
它究竟意味着什么?
在Load事件中加载控件时是否还有其他陷阱?
答案 0 :(得分:4)
那些MSDN文档(大多数)是错误的。正如您所发现的,即使您在Load
事件中动态添加控件,回发数据处理和验证仍然有效。
以下是与此问题相关的ASP.NET页面生命周期的各个阶段:
Init
活动。Load
活动。当文档说“添加的控件无法跟上回发数据处理”时,文档是正确的。但它忽略了这样一个事实:两次尝试加载发布的表单数据,一次是在Load
事件之前,一次是在Load
事件之后。因此,如果您在submitButton_Click
事件中动态添加控件,则在回发事件(例如Init
)发生时,将填充已发布的表单数据。< / p>
据我所知,这是主要的区别和潜在的陷阱:
Load
中动态添加控件,则可以在Load
中访问其发布的表单数据。HttpRequest.Form
中动态添加控件,则必须等到回发事件(或者直接访问{{1}}集合)。答案 1 :(得分:1)
这意味着在执行Control_Load
时,回发周期已经过去了。如果你有一个需要参与回发的控件,你需要先加载它,这就是为什么文档建议改为使用Init
覆盖它。
如果您的控件没有参与回发,那么您就可以了。