加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 21:51:04 所属栏目:百科 来源:网络整理
导读:我是.Net平台的新手,自从两天以来我一直在从.aspx页面检索控件. 我试图从我的网站的所有.aspx页面获取所有控件. 因此,我从我从数据库中获取的类名字符串创建了Page的对象.我已经将.aspx.cs文件的类名存储在数据库中 C#中的代码是: Page obj = (Page)Activat
我是.Net平台的新手,自从两天以来我一直在从.aspx页面检索控件.

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

C#中的代码是:

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

字符串“ClassName”取自数据库.

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

调试时的图像1:

在调试时显示我的控件的图像2

我的代码看起来像这样.

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获取控件?

解决方法

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读