2011-02-09 19 views
2

考慮下面的代碼的控制,將2個文本框具有相同ID(糟糕):Panel.FindControl()方法,沒有發現已被添加到它

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()不工作.. – 2011-02-09 11:42:39

回答

1

這可能是因爲Panel p尚未添加到頁面中。嘗試將其添加到頁面上,然後看看會發生什麼。

+0

好人,我做了「Page.Controls.Add(面板)」之前添加「panel.Controls.Add(文本框)」,它注意到控制! – 2011-02-09 13:16:38