c# - 从页面对象获取控件

标签 c# asp.net controls

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

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

C#中的代码是:

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

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

现在在调试期间我可以看到 obj 中有 controls 但我在 controls.count< 中得到 0/。我猜这是因为控件仍未初始化

调试期间的图像 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)

这是我的函数,用于从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);
                }
            }
        }

如何从我的 obj 中获取 Controls

最佳答案

您错过了 asp.net 的一个基本点:页面生命周期。

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

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

事实上,你的页面的控件在init事件之前是不可用的。

关于c# - 从页面对象获取控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16602728/

相关文章:

c# - Xamarin.Forms 的 native 嵌入 : not finding UIKit in global namespace,

asp.net - 在 session 变量中放入什么

vb.net - 检查列表是否被修改

c# - 在网站项目中扩展asp.net控件

c# - 缓存反射属性 getter/setter 的最佳方式?

c# - C#异步执行多个任务

c# - 如何在 ASP.NET MVC 中设置来自模型的下拉列表的值

c# - 在带有 Entity Framework 的 ASP.NET MVC 中,此上下文仅支持原始类型或枚举类型

c# - 改变 xml 序列化的输出

c# - 当我加载数据库时,使用带有 LINQtoSQL 的 .mdf 数据库的 WPF C# 程序卡住了一点