2

同じID(oops)を持つ2つのテキストボックスを追加する次のコードについて考えてみます。

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を2回追加するのを停止するように設計されています。ただし、この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); 
}

しかし、これが機能しない理由はわかりませんが、Placeholderコントロールとは正常にUserControl機能します。

私がsを使用している理由Panelは、CSSスタイリングのためです。body> div> input-しかし、それでも-動作していません。

4

1 に答える 1

1

これはPanel p、ページにまだ追加されていないことが原因である可能性があります。最初にページに追加してから、何が起こるかを確認してください。

于 2011-02-09T12:36:53.637 に答える