我做个一个ASP.NET网站,包括前台和后台,我现在想遍历出前台和后台所有页面的名称前台
aa.aspx
bb.aspx
cc.aspx
dd.aspx后台
admin/n1.aspx
admin/n2.aspx
admin/n3.aspx1.我想动态遍历出这些文件名2.想通过知道页面的名称,来遍历指定页面上的所有控件的名称。用过以下方法,但是只能遍历当前页面的,指定页面的不行/// <summary>
    /// 有效遍历asp.net页面所有控件的方法
    /// </summary>
    /// <param name="parent">this</param>
    void IterateThroughChildren(Control parent)
    {
        foreach (Control c in parent.Controls)
        {
            //Label1.Text += c.ID + "|";//示例
            if (c.Controls.Count > 0)       // 判断该控件是否有下属控件。
            {
                     IterateThroughChildren(c);    //递归,访问该控件的下属控件集。            }
        }
    }
我也看见网上有方法就是,对每一个控件都进行判断如,页面中包括TextBox吗?包括checkBox吗?等来逐一判断,这种效率太低了,有没有好的方法,请高手指点!

解决方案 »

  1.   


    导入system.IO
    System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(@"你的目录");
            System.IO.FileInfo[] fimore = di.GetFiles();
            foreach (System.IO.FileInfo fi in fimore)
            {
                Response.Write(fi.Name);
                Response.Write("<br>");
            }
      

  2.   

    新建公共类:BasePage 代码如下
    public class BasePage:System.Web.UI.Page
    {
            protected override void OnLoad(EventArgs e)
            {
                if (Request["getctls"] != null)
                {
                    foreach (Control ctl in this.Controls)
                    {
                        Response.Write(ctl.ID + "|");
                    }
                    Response.End();
                }
                base.OnLoad(e);
            }
    }
    每个aspx页面都继承该类
    遍历页面文件并显示每个页面包含的控件代码:            string root = Server.MapPath("/");
                string[] files = System.IO.Directory.GetFiles(root, "*.aspx");
                foreach (string f in files)
                {
                    string page = f.Replace(root, "");
                    Response.Write("页面文件:" + page + "<br />包含控件:<br />");
                    string str = new System.Net.WebClient().DownloadString(string.Format("http://{0}/{1}?getctls=1", Request.Url.Host, page));
                    Response.Write(str);
                    Response.Write("<hr />");
                }
      

  3.   

    List<string> lst=new List<string>();
                Directory.GetFiles("","*.aspx").ToList().ForEach(
                    Path=>
                        {
                            list.Add(Path);
                        }
                );
    System.IO.DirectoryInfo dir= new DirectoryInfo("");
     foreach (System.IO.FileInfo item in dir.GetFiles("*.cs", SearchOption.AllDirectories ))
    {
     
    }
    file.readalltext通过正则获取相关控件
      

  4.   


    楼上的string root = Server.MapPath("/");这句不能调出网站的虚拟路径啊?
    显示错误  未能映射路径“/”  
    帮忙解决一下吧!
      

  5.   

    string root = Server.MapPath("/");这句话我改为了当前站点名,可以通过了。
    新问题是string str = new System.Net.WebClient().DownloadString(string.Format("http://{0}/{1}?getctls=1", Request.Url.Host, page));
    显示 远程服务器返回错误: (404) 未找到。
      

  6.   


    如果你是本地测试 可以手动写URL,如:
    string str = new System.Net.WebClient().DownloadString(string.Format("http://{0}/{1}?getctls=1", "localhost:5678", page));
      

  7.   

    最好还是在IIS下配置一个域名测试
    这样跟线上环境才能一致