Search code examples
asp.netdynamicuser-controlspanelfindcontrol

Panel.FindControl() method isn't finding a control that has been added to it


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 UserControls work fine.

The reason I am using Panels is for CSS styling. body > div > input - but still - it isn't working.


Solution

  • 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.