Asp.net Panel.FindControl()方法为';找不到已添加到其中的控件
考虑以下代码,添加两个具有相同ID(oops)的文本框: 但是我不明白为什么这不起作用,而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(
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);
}