考慮下面的代碼的控制,將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>輸入 - 但仍然 - 它不工作。
是的,有一個小小的不一致在第二個例子中加2,在第一個例子中加1。我的重點是在Panel.FindControl()不工作.. – 2011-02-09 11:42:39