2009-06-27 13 views
1

B.aspxには、テキストボックスやボタンなどの簡単なWebコントロールが含まれていますが、Webフォームが2つあるとします。A.aspxB.aspxどのように動的に読み込まれたaspxページのコントロールコレクションにアクセスするには?

私がやろうとしている以下: A.aspxが要求された

、私は動的に呼び出すとBに含まれるすべてのコントロールのメモリおよび出力の詳細にB.aspxをロードする aspx。ここで

は私がA.aspxための分離コードで試したものです:私は上記のコードをしようとすると

var compiledType = BuildManager.GetCompiledType("~/b.aspx"); 
if (compiledType != null) 
{ 
    var pageB = (Page)Activator.CreateInstance(compiledType); 
} 

foreach (var control in pageB.Controls) 
{ 
    //output some details for each control, like it's name and type... 
} 

ページBためのコントロールのコレクションは常に空です。

どのように私はこれを動作させることができますか?

他のいくつかの重要な詳細:

  • 両方のWebフォームは、マスターページを利用(そうb.aspxでWebコントロールは、実際に「コンテンツ」タグ内に配置されている)
  • は私もBuildManager.CreateInstanceFromVirtualPathを使用して試してみました。運がない。
+1

なぜ実行されたページのコントロールコレクションにアクセスしたいですか? –

答えて

0

私はこのような何かをやった時はいつでも、私はいつも残念ながらPage.FindControl or Control.FindControl.

を使用しなければならなかった、にFindControlのない再帰バージョンはありません。ただし、this blog postにはFindControlRecursive関数が用意されています。これにより、コンテナ内のすべてのコントロール(おそらくPageBを含む)を反復処理できます。

private Control FindControlRecursive(Control root, string id) 
{ 
    if (root.ID == id) 
    { 
     return root; 
    } 

    foreach (Control c in root.Controls) 
    { 
     Control t = FindControlRecursive(c, id); 
     if (t != null) 
     { 
      return t; 
     } 
    } 

    return null; 
} 
0

私は実際にあなたがしたいことについてさらに多くの背景を提供するべきだと思います。 HttpServerUtility :: Execute(String、TextWriter)はページを実行し、その結果を指定されたTextWriterオブジェクトに書き込みます。そこからページの内容を調べることができます。結果のHTMLドキュメントが整形式であれば、.NET XML APIを介してその構造を走査することもできます。

実行ページのコントロールコレクションにアクセスする理由は何ですか?

関連する問題