Asp.net开发心得点滴[动态加载的用户控件使用事件委托,交给页面处理的事件无效问题]
在开发一个比较复杂的页面的时候,常常会使用到Page.LoadControl的方法获取用户控件,并将其加入到web容器控件里面通常的是placeholder,也可以是panel。
(在。dottext里面,placeholder是从panel继承的)
在开发的时候,我在用户控件里面定义了事件,试图让page页面来处理事件。
这时候,我发现了一个问题,本来我在一个用户控件里面触发了一个button,这个button事件,我定义在page页面处理,可是这个时候却没有反映。造成点两次才能触发这个button事件。
因为每次在页面load的时候,我会根据相关参数来判定加载哪个用户控件,这时候所注册的事件是无效的。
如果我不是动态加载的话,用户控件使用事件委托交由页面处理是没有问题的。
所以,我建议,如果能够确定用户控件,则使用事件委托并交有页面处理,是可以的。
如果用户控件是动态加载的,最好就不要使用事件委托并交有页面处理(这种消息传递机制)。