2011-02-09 9 views
2

다음 코드를 고려 그것에 추가 된 제어 발견되지 않습니다Panel.FindControl() 메소드 (죄송) 동일한 ID 2 텍스트 박스를 추가

protected void Page_Load(object sender, EventArgs e) 
{ 
    string TextBoxName = "TextBox1"; 

    Panel p = new Panel(); 

    TextBox t = new TextBox(); 
    t.ID = TextBoxName; 
    p.Controls.Add(t); 

    if (p.FindControl(TextBoxName) == null) // <-------******* 
    { 
     TextBox t2 = new TextBox(); 
     t2.ID = TextBoxName; 
     p.Controls.Add(t2); 
    } 

    Page.Form.Controls.Add(p); 
} 

코드가 정지하도록 설계 동일한 ID를 두 번 더합니다. 그러나 Panel.FindControl() 메서드는 이전 코드 줄에 추가 된 컨트롤을 찾지 못했습니다.

이 방법을 잘못 사용하고 있습니까?

string TextBoxName = "TextBox1"; 

Panel p = new Panel(); 

TextBox t = new TextBox(); 
t.ID = TextBoxName; 
p.Controls.Add(t); 

TextBox t2 = new TextBox(); 
t2.ID = TextBoxName; 

bool duplicateFound = false; 

foreach(Control c in p.Controls) 
{ 
    if(c.ID == TextBoxName)  
    { 
     duplicateFound = true; 
     break;  
    } 
} 

if(duplicateFound) 
{ 
    t2.ID = TextBoxName + "__0"; 
    p.Controls.Add(t2); 
} 

하지만이 작동하지 않는 이유는 Placeholder 컨트롤과 UserControl 반면, 이해가 안 : 나는 수동처럼 다음 수준의 컨트롤을 반복 할 수 - 확인 -

는 말은 괜찮아.

내가 Panel을 사용하는 이유는 CSS 스타일링 때문입니다. body> div> 입력 -하지만 여전히 작동하지 않습니다.

+0

예 두 번째 예제에서는 2가, 첫 번째 예제에서는 1이 약간 씩 비례합니다. 내 강조는 Panel.FindControl() 작동하지 않습니다 .. –

답변

1

Panel p이 (가) 아직 페이지에 추가되지 않았기 때문일 수 있습니다. 먼저 페이지에 추가 한 다음 어떻게되는지 확인하십시오.

+0

좋은 사람, "panel.Controls.Add (textBox)"를 추가하기 전에 "Page.Controls.Add (panel)"을 추가하고 컨트롤을 발견했습니다! –

+0

Page.Controls.Add()를 수행하지 말고 Page.Form.Controls.Add()를 수행하십시오. –

관련 문제