同じ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-しかし、それでも-動作していません。