2

考虑以下代码,添加 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); 
}

但我不明白为什么这不起作用,而Placeholdercontrols 和UserControls 工作正常。

我使用Panels 的原因是为了 CSS 样式。body > div > input - 但仍然 - 它不起作用。

4

1 回答 1

1

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

于 2011-02-09T12:36:53.637 回答