asp.net webforms - составные элементы управления, взаимодействующие с элементами управления страницы
Я пишу составной элемент управления на C# asp.net в качестве эксперимента и хотел бы, чтобы все экземпляры моего составного элемента управления взаимодействовали с одним внешним элементом управления. Это возможно?
Вещи, которые я пробовал:
вариант 1: проверьте изнутри элемента управления, существует ли на странице внешний элемент управления, и добавьте его, если его нет
вариант 2: передайте идентификатор целевого элемента управления в составной элемент управления во время разработки, а затем используйте this.Page.FindControl()
Очевидно, это было бы желаемым, думая, что это будет так просто:)
Если я пытаюсь сделать это из метода CreateChildControls, this.Page.FindControl(target control) всегда возвращает ноль. Если я пытаюсь добавить элемент управления на страницу из этого метода, он выдает исключение:
"Коллекция элементов управления не может быть изменена на этапах DataBind, Init, Load, PreRender или Unload".
Есть ли другой метод / событие, где я могу достичь этого?
2 ответа
Почему бы вам не предоставить в свой составной элемент управления общедоступное свойство того, что выводить из них, а затем при визуализации содержимого панели прокрутить страницу, найти все экземпляры составного элемента управления, захватить текст и добавить его на панель?
Вы можете создать несколько экземпляров в одной и той же веб-форме, реализовав интерфейс INamingContainer. Это в основном помогает предотвратить конфликты идентификаторов в одном и том же пространстве имен.
Если вы хотите получить доступ к другому элементу управления, установите для него свойство, чтобы предоставить доступ к данным, которые вы хотите сделать общедоступными.