我是 .Net 平台的新手,两天以来我一直在从 .aspx 页面检索控件。
我正在尝试从我网站的所有 .aspx
页面获取所有 控件
。
因此,为此,我根据从数据库中获取的类名字符串创建页面对象。我已经将 .aspx.cs 文件的类名
存储在数据库中
C#中的代码是:
Page obj = (Page)Activator.CreateInstance(null, string ClassName).Unwrap();
字符串"ClassName"
取自数据库。
现在在调试期间我可以看到 obj
中有 controls
但我在 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
中获取 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/