我有一个母版页,它在内容页面和母版页本身上都有许多控件。所有这些控件都扩展了System.Web.UI.UserControl,有些实现了一个名为IControlInjector的接口。
当主页加载时,有什么办法可以在主页中检查控件树中正在加载哪些控件并找到所有那些实现IControlInjector接口的控件?
答案 0 :(得分:3)
// put in code-behind class...
private void GatherIControlInjectors(Control control, IList<IControlInjector> controls){
foreach(Control ctrl in control){
if(ctrl is IControlInjector)
controls.Add(ctrl);
if(ctrl.Controls.Count > 0)
GatherIControlInjectors(ctrl, controls);
}
return;
}
// example
IList<IControlInjector> ctrlInjectors = new List<IControlInjector>();
GatherIControlInjectors(Master, ctrlInjectors);
答案 1 :(得分:0)
您可以追溯性地为ControllerCollection添加扩展方法。添加或覆盖ControlsCollection以及add方法来处理添加控件,实现特定接口,以便您可以将它们直接插入注册表(例如字典或列表)。从而可以以强类型,快速查找方式访问您的控件。