2017-01-26 8 views
3

ドロップダウンリストで構成された異なるフィルタを持つ3つのマスターページのセットがあります。ページが完成したら、これらのドロップダウンにApp_Codeフォルダのヘルプクラスを使用して繰り返しコードを減らすオプションを埋めたいと思っています。私が持っている問題は、以下のメソッドが受け取るMasterPageでこれらのドロップダウンを見つけることができないということです。これを行うことができますか、私は他の選択肢を探求すべきですか?ASP.NETインスタンスのみを使用してMasterPageからコントロールにアクセス

私は最初のContentPlaceHolderを検索し、検索しようとしていますが、ドロップダウンをしているのContentPlaceHolderを見つけることができません。
私も親にアクセスしようとそこからのContentPlaceHolderが、無サイコロを見つけてきました。

その他のオプションでは、このクラスにドロップダウンを送信して埋め込むことができます。これは簡単な解決方法です。しかし、私はこの非常に一般的な解決策を最初に探求したいと思います。

答えて

2

この拡張メソッドを試してください。私は私の最終的なコードに次のように使用することを決めたあなたは、コントロールが現在のコントロールの親が

public static class ControlsExtensionMethods 
{ 
    public static Control FindControlRecursive(this Control root, string id) 
    { 
     if (id == string.Empty) 
     { 
      return null; 
     } 


     if (root.ID == id) 
     { 
      return root; 
     } 

     foreach (Control nestedControl in root.Controls) 
     { 
      Control foundedControlInNested = FindControlRecursive(nestedControl, id); 
      if (foundedControlInNested != null) 
      { 
       return foundedControlInNested; 
      } 
     } 
     return null; 
    } 
} 
+0

これは完璧に機能しました。ありがとうございます!私は以前このソリューションを見てきましたが、それが私を助けてくれるとは思わなかった。 – HighestPie

+1

歓迎です^^ –

0

ファンの答え(多分これが編集する必要があります?)へ追加する必要があるだけであること、マスターページを必要としません:

public static void FillFilters(MasterPage page) { 
    Control parent = page.Controls[0]; 

    DropDownList[] dropdowns = new DropDownList[3]; 
    dropdowns[0] = (DropDownList)parent.FindControlRecursive("StatusDropDown"); 
    dropdowns[1] = (DropDownList)parent.FindControlRecursive("DepartmentDropDown"); 
    dropdowns[2] = (DropDownList)parent.FindControlRecursive("EmployeeDropDown"); 

私は後でこのメソッドでMasterPageを使用します。

関連する問題