2011-07-04 19 views
2

私はajaxタブのコンテナを持つaspxページを持っています。クラスでは、いくつかの値を渡すためにタブコンテナを探したいと思います。クラスでコントロールを検索 - コントロールが見つかりません

私はmyPageを定義します。

Page myPage = (Page)HttpContext.Current.Handler; 

それは私が探していますタブコンテナを一覧表示される時計を追加]をクリックすることで、このmyPageの詳細に見てみると。私は私のタブコンテナ

AjaxControlToolkit.TabContainer Workflow_TabContainer = null; 
Workflow_TabContainer = 
     (AjaxControlToolkit.TabContainer)myPage.FindControl("Workflow_TabContainer") 
     as AjaxControlToolkit.TabContainer; 

または

AjaxControlToolkit.TabContainer Workflow_TabContainer 
     (AjaxControlToolkit.TabContainer)myPage.FindControl("Workflow_TabContainer"); 

を定義するときしかし、それは、タブコンテナを見つけることができません。私はContentPlaceholderよりも最初にページを定義しようとし、プレースホルダーのタブコンテナを探しました。同じ問題。

ご協力いただきありがとうございます。

おかげ

+0

をあなたが検索しようとする前に、すべてのページに 'Workflow_TabContainer'を追加するように、それはいないようです。 '.FindControl'はまだ存在しないコントロールを見つける方法は? – diceler

+0

可能な重複(Yannが別のクラスからページ上のコントロールを見つけたいと思うほど、コントロールは異なるかもしれませんが、ソリューションは同じです)[FindControlを使用してコンテンツページでGridViewを取得する] //stackoverflow.com/questions/6525804/using-findcontrol-to-get-gridview-in-a-content-page) –

+0

@ziga。 tabcontainerは動的に追加されるのではなく、静的にサイトに追加されます。私はタブパネルを動的に追加するだけです。コンテナは確かにそこにある、私はそれを見ることができます:) – Yann

答えて

2

FindControl方法は、子供たちだけのための電流制御に見えます。

ページ階層のどこにコントロールがあるのか​​わからない場合は、再帰的な検索が必要です(TabContainerなどのテンプレートコントロールを使用している場合など)。私はsimilar answerに以前に投稿した通り

private Control FindControlRecursive(Control rootControl, string controlID) 
{ 
    if (rootControl.ID == controlID) { 
    return rootControl; 
    } 

    foreach (Control controlToSearch in rootControl.Controls) 
    { 
    Control controlToReturn = 
     FindControlRecursive(controlToSearch, controlID); 
    if (controlToReturn != null) { 
     return controlToReturn; 
    } 
    } 

    return null; 
} 

を、あなたのコントロールを持ってたら、asを使用して、それをキャストし、それはあなたが期待していたものを、非常にではありません念のためにnullをチェックする必要があります:

var tabContainer = FindControlRecursively(myPage, "Workflow_TabContainer") 
       as AjaxControlToolkit.TabContainer 

if (null != tabContainer) { 
    // Do Stuff 
} 
+0

こんにちはZhaph、あなたのコメントのおかげで! – Yann

+0

あなたは少し再帰的な検索exaclty何かを詳細に説明してください。私はasp.netとC#の初心者であり、何が再帰的に意味されているかわからない。多分例がありますか? – Yann

+0

こんにちはYann - 私はあなたが使用できるいくつかのコードの例を追加しました。 'FindControlRecursive'メソッドのようなメソッドが必要です。このメソッドは自分自身を呼び出すことになります(したがって、再帰的な用語)。そして、あなたは' myPage'変数とあなたが望むコントロールの名前でそのメソッドを呼び出します見つけるには。このメソッドは 'Controls'コレクション内の各コントロールを探します。必要なものがあればそれを返し、コントロールの場合は目的のコントロールを見つけるまでそのコントロールをメソッドに渡します。何も見つからない場合、あなたは 'null'を取得します。 –

関連する問題