Установка AssociatedControlID для метки не удалась
У меня есть составной элемент управления, который добавляет элемент 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;
оба сразу после добавления элементов управления в коллекцию Controls и даже в PreRender - оба дают одинаковую ошибку. Что я делаю неправильно?
2 ответа
Я думаю, что вы не должны использовать свойство ClientID ElementTextBox, но идентификатор. ClientID - это уникальный идентификатор страницы, который вы должны использовать в Javascript, например, в document.getElementyById, и он не совпадает с идентификатором на стороне сервера, особенно если у вас есть главная страница и / или элементы управления в элементах управления и т. Д.
Так и должно быть:
ElementLabel.AssociatedControlID = ElementTextBox.ID;
Надеюсь это поможет.
Возможно, полезно для других читателей, которые сталкиваются с ошибкой:
Обратите внимание, что настройка 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);
}