2008-10-22 2 views
3

У меня есть составной элемент управления, который добавляет элемент управления TextBox и Label в свою коллекцию Controls. Когда я пытаюсь установить AssociatedControlID лейбла в ClientID в Textbox я получаю эту ошибкуНастройка AssociatedControlID на метке завершена

Unable to find control with id 
'ctl00_MainContentPlaceholder_MatrixSetControl_mec50_tb' 
that is associated with the Label 'lb'. 

ИТАК небольшой предыстории. Я получил этот основной составной элемент управления, который динамически добавляет несколько «элементов» в свою коллекцию управления. Один из этих элементов - это «MatrixTextBox», который является элементом управления, состоящим из TextBox и метки.

Я придерживаюсь этикетки и TextBox в качестве защищенных переменных класса и инициализировать их в CreateChildControls:

ElementTextBox = new TextBox(); 
    ElementTextBox.ID = "tb"; 
    Controls.Add(ElementTextBox); 

    ElementLabel = new Label(); 
    ElementLabel.ID = "lb"; 
    Controls.Add(ElementLabel); 

Я попытался установить

ElementLabel.AssociatedControlID = ElementTextBox.ClientID; 

как сразу после добавления элементов управления в коллекции Controls и даже в PreRender - обе дают ту же ошибку. Что я делаю не так?

ответ

7

Я думаю, что вы не должны использовать свойство ElementTextBox ClientID, но ID. ClientID - уникальный для страницы идентификатор, который вы должны использовать в Javascript, например. в document.getElementyById и не такой же, как на стороне сервера ID - особенно если у вас есть MasterPage и/или контроль в контрольных и т.д.

Так оно и должно быть:

ElementLabel.AssociatedControlID = ElementTextBox.ID; 

Надеется, что это помогает ,

+0

Спасибо! Черт, я сейчас чувствую себя глупо :) – 2008-10-22 08:08:49

+0

@Hojou: oh, ... подобные ошибки случаются со мной все время. Это так ясно, если вы видите решение ... – splattne 2008-10-22 08:15:56

3

Возможно, полезные и для других читателей, которые сталкиваются с ошибкой:

Обратите внимание, что установка AssociatedControlID терпит неудачу также, если вы связывая этикетку с входным контролем во время выполнения без явного задания идентификатора элемента управления вводом первого. Это проблема, которая требует внимания, если вы создаете несколько текстовых полей, флажки или радиообъективы с ярлыками динамически.

private void AddRadioButton(PlaceHolder placeholder, string groupname, string text) 
{ 
    RadioButton radio = new RadioButton(); 
    radio.GroupName = groupname; 
    radio.ID = Guid.NewGuid().ToString(); // Always set an ID. 

    Label label = new Label(); 
    label.Text = text; 
    label.AssociatedControlID = radio.ID; 

    placeholder.Controls.Add(radio); 
    placeholder.Controls.Add(label); 
} 
Смежные вопросы