Задать AssociatedControlID для метки не удалось - PullRequest
3 голосов
/ 22 октября 2008

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

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

Хорошо, так немного фона. Я получил этот основной композитный элемент управления, который динамически добавляет ряд «элементов» в свою коллекцию элементов управления. Одним из этих элементов является MatrixTextBox, который является элементом управления, состоящим из TextBox и Label.

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

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

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

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

ElementLabel.AssociatedControlID = ElementTextBox.ClientID;

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

Ответы [ 2 ]

7 голосов
/ 22 октября 2008

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

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

ElementLabel.AssociatedControlID = ElementTextBox.ID;

Надеюсь, это поможет.

3 голосов
/ 15 ноября 2008

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

Обратите внимание, что установка 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...