Рассмотрим следующий код, добавив 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);
}
Код предназначен для прекращения добавления одного и того же идентификатора дважды. Однако метод 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
работают нормально.
Причина, по которой я использую Panel
s, заключается в стилизации CSS. body> div> input - но все же - он не работает.