考虑以下代码,添加 2 个具有相同 ID 的文本框(哎呀):
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
controls 和UserControl
s 工作正常。
我使用Panel
s 的原因是为了 CSS 样式。body > div > input - 但仍然 - 它不起作用。