Asp.net Panel.FindControl()方法为';找不到已添加到其中的控件

Asp.net Panel.FindControl()方法为';找不到已添加到其中的控件,asp.net,dynamic,user-controls,panel,findcontrol,Asp.net,Dynamic,User Controls,Panel,Findcontrol,考虑以下代码,添加两个具有相同ID(oops)的文本框: 但是我不明白为什么这不起作用,而Placeholder控件和UserControls工作正常 我之所以使用面板s是为了CSS样式。body>div>input-但仍然不起作用。这可能是因为面板p尚未添加到页面中。首先尝试将其添加到页面中,然后看看会发生什么。是的,存在轻微的不一致性。在第二个示例中添加2,在第一个示例中添加1。我的重点是Panel.FindControl()不起作用..好家伙,在添加“Panel.Controls.Add(

考虑以下代码,添加两个具有相同ID(oops)的文本框:

但是我不明白为什么这不起作用,而
Placeholder
控件和
UserControl
s工作正常


我之所以使用
面板
s是为了CSS样式。body>div>input-但仍然不起作用。

这可能是因为
面板p
尚未添加到页面中。首先尝试将其添加到页面中,然后看看会发生什么。

是的,存在轻微的不一致性。在第二个示例中添加2,在第一个示例中添加1。我的重点是Panel.FindControl()不起作用..好家伙,在添加“Panel.Controls.Add(textBox)”之前,我做了“Page.Controls.Add(Panel)”,它注意到了这个控件!不执行Page.Controls.Add(),执行Page.Form.Controls.Add()
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);
}
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); 
}