从页面对象获取控件

时间:2013-05-17 06:22:26

标签: c# asp.net controls

我是.Net平台的新手,自从两天以来我一直在从.aspx页面检索控件。

我正在尝试从我网站上的所有controls页面获取所有.aspx。 因此,我从我从数据库中获取的类名字符串创建了Page的对象。我已将class names个.aspx.cs文件存储在数据库

C#中的代码是:

Page obj = (Page)Activator.CreateInstance(null, string ClassName).Unwrap();

字符串"ClassName"取自数据库。

现在,在调试期间,我可以看到controls中有obj但我在0中获得了controls.count。我想这是因为控件仍然是not initialized

调试期间

图片1 Image 1 during debug time

图片2在调试期间显示我的控件 Image 2 during debug time showing my controls

我的代码看起来像这样。

Page obj = (Page)Activator.CreateInstance(null, string ClassName).Unwrap()
List<string[]> fieldsNotInDB = GetControlCollections(obj)

这是我function获取controls

中的所有Page obj
public List<string[]> GetControlCollections(Page p)
        {

            List<string[]> controlList = new List<string[]>();
            IterateControls(p.Controls, controlList);
            return controlList;
        }
        public void IterateControls(System.Web.UI.ControlCollection page, List<string[]> controlList)
        {
            foreach (System.Web.UI.Control c in page)
            {
                if (c.ID != null)
                {
                    string []s=new string[2];
                    s[0]=c.ID;
                    s[1]=c.GetType().ToString();
                    controlList.Add(s);
                }

                if (c.HasControls())
                {
                    IterateControls(c.Controls, controlList);
                }
            }
        }

如何从Controls获取obj

1 个答案:

答案 0 :(得分:1)

您缺少asp.net的基本要点:页面生命周期。

在这里,您要创建页面对象的实例,这是初始化集合的时间。

但是在一个真正的asp.net webforms网站中,当你到达一个页面时,asp.net管道不仅创建了实例,而且还会启动附加到页面的几个事件(参见http://msdn.microsoft.com/en-us/library/ms178472(v=vs.100).aspx

实际上,在init事件之前,你的页面控件将无法使用。