2010-06-10 4 views
0

내 코드에서 컨트롤을 렌더링하는 데 사용하고있는 ListView 내부에 PlaceHolder 컨트롤이 있습니다. 내가 텍스트 상자에 입력 된 값을 검색하려면 다음 코드를 사용하고FindControl 함수를 사용하여 동적으로 생성 된 컨트롤을 찾는 방법은 무엇입니까?

TextBox tb = new TextBox(); 
tb.Text = quest.Value; 
tb.ID = quest.ShortName.Replace(" ", ""); 
((PlaceHolder)e.Item.FindControl("ph_QuestionInput")).Controls.Add(tb); 

:

foreach (ListViewDataItem di in lv_Questions.Items) 
{ 
    int QuestionId = Convert.ToInt32(((HiddenField)di.FindControl("hf_QuestionId")).Value); 
    Question quest = dc.Questions.Single(q => q.QuestionId == QuestionId); 
    TextBox tb = ((TextBox)di.FindControl(quest.ShortName.Replace(" ",""))); 
    //tb is always null! 
} 

을하지만 컨트롤을 발견하지 아래 코드는 컨트롤을 추가합니다. 나는 ListViewDataItem의 컨트롤 볼 때 클라이언트 ID가 어떤 이유

ctl00_cphContentMiddle_lv_Questions_ctrl0_Numberofacres

:

을 나는 페이지와 내가 원하는 컨트롤의 소스 코드를 검토 한 결과이 ID를 가지고 ctl00_cphContentMiddle_lv_Questions_ctrl0_ctl00

Numberofacres를 ctl00으로 변경하는 이유는 무엇입니까? 이 문제를 해결할 수있는 방법이 있습니까?

UPDATE :

그냥 난 후 Page_Init 이벤트 내 ListView에 데이터 바인딩하고, 명확하게. 그런 다음 ListView의 ItemBound 이벤트에 컨트롤을 만듭니다. 그러나 @Womp와 MSDN이 말하는 것은 컨트롤이 Load 이벤트 (Page_Init 이벤트 이후) 이후 ViewState에 없을 때까지 실제로 생성되지 않는다는 것입니다. 이 소리가 맞습니까?

내 OnClick 이벤트에서 내 동적 컨트롤의 값을 검색 할 때 그렇다면 단지 그렇습니까?

UPDATE 2 :

protected void Page_Init(object sender, EventArgs e) 
{ 
     if (!this.IsPostBack) 
     { 
      //databind lv_Questions 
     } 
} 

에 :

그래서 난에서 내 후 Page_Init 이벤트에 내가 가진 코드를 변경

protected void Page_Init(object sender, EventArgs e) 
{ 
      //databind lv_Questions 
} 

그리고 그것은 내 문제를 해결했습니다. 아직도 포스트 백인지 여부에 관계없이 데이터 바인딩을 원하지만 문제가 해결 된 이유는 조금 혼란 스럽습니다.

답변

1

Placeholder 컨트롤에 텍스트 상자를 추가 한 것 같습니다.하지만 나중에 ListViewDataItem 컨테이너를 검색하고 있습니다.

먼저 자리 표시자를 검색 한 다음 텍스트 상자를 검색해야합니다.

+0

PlaceHolder 컨트롤의 내부 동작을 알 수는 없지만 PlaceHolder 컨트롤을 찾을 때 자식 컨트롤이없는 것을 확인했습니다. 내 게시물의 마지막 5 줄을 기반으로 TextBox 컨트롤이 있다고 가정하지만 ID가 변경되었습니다 (Numberofacres에서 ctl00으로 끝날 때까지). –

+0

다시 게시 할 때마다 텍스트 상자를 똑같은 방법으로 다시 만듭니다 (같은 컨테이너에 같은 순서로 추가)? – womp

+0

'! this.IsPostBack' 때만 생성합니다. OnClick 단추 이벤트에서 이러한 컨트롤에 입력 된 값을 검색하려고합니다. –

관련 문제