7

もう一度asp.netの専門家に連絡を取り、答えを得たいと思っています。私は本当にここで立ち往生しており、助けを求めています. うまくいけば、私の質問に反対票が投じられず、人々が単に私のアプローチを判断するのではなく、純粋に技術的な観点から答えを得ることができます.

以前、私は次のように質問を投稿しました: asp.net asp.net ページをページ変数に変換します。

次に、次のページを見ましたが、それでもうまくいきません。

System.Reflection を使用して ASP.NET 2.0 aspx ページを読み込みますか?

Web アプリケーション内で、"WebForm1.aspx" のようなコード内の任意の場所で Web ページを参照し、そのページのコントロールのリストを取得できるようにしたいと考えています。この観点から見てください。過度に分析しないでください。出来ますか?

私のページ変数 p には、WebForm1.aspx のコントロールがないようです

これが私のコードです。

助けてください。

 protected void Page_Load(object sender, EventArgs e)
    {
        string[] filePaths = Directory.GetFiles(Server.MapPath("~/"), "*.*", SearchOption.AllDirectories);

        foreach (string filepath in filePaths)
        {
            if (filepath.EndsWith(".aspx"))
            {
                Response.Write(filepath + "<br/>");

                string[] folders = filepath.Split('\\');
                string filename = folders[folders.Count() - 1];
                string fullpath = "~/" + filename;

                Page p = BuildManager.CreateInstanceFromVirtualPath("~/"+fullpath, typeof(Page)) as Page;

                List<String> controlList = new List<String>();
                ResourceManager.AddControls(p.Controls, controlList);

                foreach (string str in controlList)
                {
                    Response.Write(str + "<br/>");
                }


            }
        }
4

2 に答える 2

2

コントロールをロードする代わりの方法を次に示します。

protected void Page_Load(object sender, EventArgs e)
{
    Type type = BuildManager.GetCompiledType("~/Default.aspx");
    var page = (Default)Activator.CreateInstance(type);
    ((IHttpHandler)page).ProcessRequest(HttpContext.Current);
    var count = page.Controls.Count;
    Response.Clear(); // Because we use HttpContext.Current the response has a lot of stuff
}
于 2012-07-10T23:25:51.830 に答える