C# 列出页面中应用程序的所有网页的所有控件
我正在开发一个页面来管理ASP.NET应用程序中的权限。我想知道是否有一种方法可以方便地列出我的页面的所有控件 此方法在下拉列表中列出所有页面:C# 列出页面中应用程序的所有网页的所有控件,c#,asp.net,C#,Asp.net,我正在开发一个页面来管理ASP.NET应用程序中的权限。我想知道是否有一种方法可以方便地列出我的页面的所有控件 此方法在下拉列表中列出所有页面: //I take all aspx and ascx pages from my solution foreach (String item in Directory.GetFiles(Server.MapPath("~")). Where(key => key.EndsWith("aspx") || k
//I take all aspx and ascx pages from my solution
foreach (String item in Directory.GetFiles(Server.MapPath("~")).
Where(key => key.EndsWith("aspx") || key.EndsWith("ascx")))
{
String[] itemSplit = item.Split('\\');
listePages.Items.Add(new ListItem(itemSplit[itemSplit.Length - 1], itemSplit[itemSplit.Length - 1]));
}
当用户选择页面时会触发此事件:
Page g = (Page)Activator.CreateInstance(Type.GetType(pageName));
foreach (Control c in g.Form.Controls)
{
this.listeControls.Items.Add(new ListItem(c.ClientID, c.ClientID));
}
但此事件触发了NullReferenceException
感谢您的帮助。这是一种方法,而不是答案,但我要看的是: 每个ASPX页面被编译成一个特定的.net对象;通过查看创建的.designer文件可以看到这一点;它对页面上的每个控件都有引用 您可以加载该对象并使用反射来获取其每个属性,并检查它是否是控件的扩展 这将为您的下拉列表提供一个列表。我想,诀窍在于找到合适的物体进行反射检查 这肯定比用正则表达式解析ASPX/ASCX要好 为了提供一些帮助,这里有一个关于如何找到已编译代码的答案:
根据您的代码在何处和何处运行,您可能需要考虑您的站点可能不是完全信任运行的。
< P>用Russ Clarke的解决方案:using (StreamReader sr = new StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + pageName + ".designer.cs"))
{
String line = "";
while ((line = sr.ReadLine()) != null)
{
if (line.Contains(';'))
{
String[] tab = line.Split(' ');
String nomSplit = tab[tab.Length - 1].Split(';')[0];
this.listeControls.Items.Add(new ListItem(nomSplit, nomSplit));
}
}
}
谢谢你,这正是我想要的。我没有得到你。是否要从目录中查找所有.aspx和.ascx文件?或者你正试图直接从解决方案中解决这个问题?我同意你的看法。但首先,我会将aspx文件作为XML文件进行测试,但它似乎不起作用,有太多特殊的字符。。。所以,我会听从你的建议:谢谢,这很好,但是HTML/ASPX不是XML,不管它看起来有多像它!