Consider the following code, adding 2 textboxes with the same ID (oops):
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);
}
The code is designed to stop adding the same ID twice. However, the Panel.FindControl()
method is not finding a control that was added in the previous line of code.
Am I using this in the wrong way?
I mean - sure - I could manually iterate through the controls in the next level, like:
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);
}
But I don't understand why this isn't working, whereas Placeholder
controls and UserControl
s work fine.
The reason I am using Panel
s is for CSS styling. body > div > input - but still - it isn't working.
This could be because Panel p
has not yet been added to the page. Try adding it to the page first, then see what happens.