2012-01-25 2 views
0

좋아, 아이디로 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(); // div가있는 곳의 페이지 제어 phd = (Control) 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 감사 : 내 콘텐츠를 표시하는 마스터 페이지를 사용하기 때문에 그러나, 이것은 나에게 가장 적합한 솔루션입니다.

관련 문제