ASP.NET Несколько средств управления с тем же идентификатором 'x' был найден. FindControl

Вы можете проверить этот плагин FlutterGeofencing

5
задан Qantas 94 Heavy 10 July 2014 в 10:53
поделиться

3 ответа


ItemCodeCell.Controls.Add((Literal)additionalServices[cell - 1].FindControl("ltlItemCode") as Literal);

Я предполагаю, что это - проблема, похоже на добавление того же управления много раз но я не уверен. Попытайтесь изменить.ID того недавно добавленного Литерала.

Кроме того, я никогда не использовал "EnsureID ()" прежде, но кажется, что это может помочь. Что-то вроде


Literal duplicateLiteral = (Literal)additionalServices[cell - 1].FindControl("ltlItemCode") as Literal;
duplicateLiteral.EnsureID();
ItemCodeCell.Controls.Add(duplicateLiteral);

Это не может работать, хотя, так как это похоже, это вставило бы ту же копию duplicateLiteral много раз, хотя, я не уверен.

3
ответ дан 14 December 2019 в 09:01
поделиться

Я соглашаюсь, что похоже на добавление того же Управления много раз, которое вызывает конфликт имен. Также похоже, что можно добавлять средства управления к наборам Средств управления других средств управления в неправильном порядке. Например, Вы добавляете в этом порядке:

TableHeaderRow h = new TableHeaderRow();    
TableHeaderCell hc1 = new TableHeaderCell();    
hc1.Text = "Item Description";    
h.Cells.Add(hc1);    
TableHeaderCell hc2 = new TableHeaderCell();    
hc2.Text = "Item Price";    
h.Cells.Add(hc2);    
TableHeaderCell hc3 = new TableHeaderCell();    
hc3.Text = "Item Quantity";    
h.Cells.Add(hc3);    
TableHeaderCell hc4 = new TableHeaderCell();    
hc4.Text = "Item Sub Total";    
h.Cells.Add(hc4);    
Table1.Rows.Add(h);

Когда необходимо действительно добавлять в этом порядке:

TableHeaderRow h = new TableHeaderRow();   
Table1.Rows.Add(h); 
TableHeaderCell hc1 = new TableHeaderCell();
h.Cells.Add(hc1);   
hc1.Text = "Item Description";      
TableHeaderCell hc2 = new TableHeaderCell();
h.Cells.Add(hc2);    
hc2.Text = "Item Price";       
TableHeaderCell hc3 = new TableHeaderCell();
h.Cells.Add(hc3);    
hc3.Text = "Item Quantity";      
TableHeaderCell hc4 = new TableHeaderCell();
h.Cells.Add(hc4);    
hc4.Text = "Item Sub Total";    

Как правило, я всегда пытаюсь добавить новое управление к родительскому набору Средств управления как можно скорее, чтобы гарантировать, чтобы любые дочерние элементы управления наследовали корректный UniqueID. Если Вы создаете новое Управление X и начинаете добавлять к X.Controls ПРЕЖДЕ, ЧЕМ добавить X к родительскому набору Средств управления затем, дочерние элементы управления не могут наследовать правильный UniqueID.

3
ответ дан 14 December 2019 в 09:01
поделиться

Я не думаю, что EnsureID решит Вашу проблему, поскольку это только создаст идентификатор для средств управления, которые уже не имеют того.

Как Allen указывает, Вы добавляете то же управление много раз. Необходимо создать новые средства управления, которые дадут Вам новые идентификаторы. Вы также называете FindControl для контроля, на который Вы уже имеете ссылку...? Данные копии из существующего управления, если Вы должны, но не добавить существующее управление неоднократно. Для литерала вероятно, единственной вещью значения в нем является текст? Так измените свой код на что-то как:

Literal ItemCode = (Literal)additionalServices[cell - 1].FindControl("ltlItemCode") as Literal;
ItemCode.Text = reader_list["itemDescription"].ToString();

Literal ItemCode2 = new Literal();  //create a new control
ItemCode2.Text = ItemCode.Text;     //copy the data you need

TableCell ItemCodeCell = new TableCell();
ItemCodeCell.Controls.Add(ItemCode2);  // add new control
1
ответ дан 14 December 2019 в 09:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: