2012-01-25 7 views
0

いいえ、id魔法使いのdivコントロールにアクセスしたいのですが、C#コードから動的に変更されています。多分それはコードで明確になります。コードビハインドから名前でdivコントロールを取得

string divHtml = ""; 
     for (int j = 1; j < 4; j++) 
     { 
      string ph = "placeHolder" + j; 

      Control phd = (Control)FindControl(ph); 
      StringWriter sw = new StringWriter(); 
      HtmlTextWriter w = new HtmlTextWriter(sw); 
      phd.RenderControl(w); 
      divHtml = divHtml + sw.GetStringBuilder().ToString(); 
     } 

とASCX一部です:

<div runat="server" id="placeHolder1" class="placeholder" >     
</div> 

それは時間をコンパイル渡すが、博士号がないコントロールの値に、NULL値です。

StringWriter sw = new StringWriter(); 
HtmlTextWriter w = new HtmlTextWriter(sw); 
placeHolder1.RenderControl(w); 
divHtml = divHtml + sw.GetStringBuilder().ToString(); 

は、事前にありがとう

+0

申し訳ありませんが、変数の名前が間違っています。それはphdであり、cntPhではありません。ありがとう... –

答えて

1

にFindControlだけ見つかった最初のレベルで制御しますので、あなたのコントロールがダウンコントロールツリー内に配置されている場合....:私はこのようなコントロールを直接アクセスする場合は正常に動作しますFindControlをネストして作成する必要があります。

詳細はASP.NET Is there a better way to find controls that are within other controls?をご覧ください。

親(ページ)がある場合、そのコントロールのpage.FindControl( "placeHolder1")を直接呼び出す必要があります。

+0

はい、私のコントロールはネストされています。あなたは私に例を挙げることができますか? id = "page"のdivタグ内にネストされています。 –

+1

id = "page"はおそらく選ばれたIDではないでしょう:) – bang

+0

問題のdivがあるページのcodebehindから呼び出します。同じ結果でPage.FindControl( "placeHolder")とbase.FindControl( "placeHolder")を試しました。また、Pages_Core core = new Pages_Core(); // pageはdivです コントロールphd =(コントロール)core.FindControl(ph); –

0

@bangのおかげで、入れ子に問題があると思いました。しかし、私は私のコンテンツを表示するには、マスターページを使用するので、これは私のために最善であるソリューションです:

for (int j = 1; j < 4; j++) 
     { 
      string ph = "placeHolder" + j; 

      ContentPlaceHolder cph = this.Master.FindControl("MainContent") as ContentPlaceHolder; 
      Control ctrlPh = cph.FindControl(ph); 

      StringWriter sw = new StringWriter(); 
      HtmlTextWriter w = new HtmlTextWriter(sw); 
      ctrlPh.RenderControl(w); 
      divHtml = divHtml + sw.GetStringBuilder().ToString(); 

     } 

が@bangありがとう、あなたは正しい方向に私を押しました。

関連する問題