4

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

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

C#中的代码是:

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

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

现在在调试期间,我可以看到有controlsobj但我进入0controls.count. 我猜这是因为控件还在not initialized

调试期间的图像 1调试期间的图 1

调试期间的图 2 显示了我的控件调试期间的图 2 显示了我的控件

我的代码看起来像这样。

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

这是我functioncontrolsPage 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?

4

1 回答 1

1

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

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

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

实际上,在 init 事件之前,您的页面的控件将不可用。

于 2013-05-17T07:26:42.287 回答