Метод Panel.FindControl () не находит элемент управления, который был добавлен в него - PullRequest
2 голосов
/ 09 февраля 2011

Рассмотрим следующий код, добавив 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 - но все же - он не работает.

1 Ответ

1 голос
/ 09 февраля 2011

Это может быть потому, что Panel p еще не добавлено на страницу. Попробуйте сначала добавить его на страницу, а затем посмотрите, что произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...