Динамічна завантаження елементів управління

ASP.NET --- Веб-сайти ASP.NET --- Динамічна завантаження власних елементів керування

До цього часу було показано, як додавати елементи керування на сторінку шляхом реєстрації типу користувача елемента управління і додавання відповідного дескриптора. Користувальницькі елементи керування можна створювати також динамічно - тобто конструювати їх "на льоту" за допомогою невеликого обсягу коду веб-сторінки.

Ця технологія аналогічна прийому, що використовується для динамічного додавання звичайних веб-елементів керування. Як і при роботі зі звичайними елементами управління, потрібно виконати такі дії:

Додати елементи керування при запуску події Page.Load (щоб керований елемент керування міг правильно відновлювати свій стан і приймати події зворотної відправки).

Застосовувати контейнерні елементи керування та елемент керування PlaceHolder, щоб елементи користувача відображалися саме там, де необхідно.

Призначити користувача елементу управління унікальне ім'я, встановивши його властивість ID. Цю інформацію можна використовувати для отримання посилання на елемент керування за допомогою Page.FindControl() методу, коли це знадобиться.

Однак є один додатковий нюанс. Об'єкт користувача елемента управління не можна створити безпосередньо, як це мало місце при роботі зі звичайним елементом управління. Справа в тому, що елементи керування створюються не тільки кодом - вони потребують також дескрипторів, які визначені у файлі .ascx. Для взаємодії з елементом керування ASP.NET потрібно обробити цей файл і ініціалізувати відповідні об'єкти дочірніх елементів керування.

Дляцього має бути викликаний метод Page.LoadControl(). При викликі методу LoadControl() передається ім'я файлу розмітки .ascx користувача елемента управління. LoadControl() повертає об'єкт UserControl, який можна додати до сторінки.

Нижче наведено приклад динамічного завантаження користувача елемента управління TimeDisplay (створеного в попередній статті) і його додавання до сторінки за допомогою елемента управління PlaceHolder:

Незважаючи на це невелика незручність, динамічне завантаження елементів управління надає великі можливості. Зазвичай її застосовують для створення портальних платформ, що конфігуруються.

Портальні платформи

Хоча створення повноцінної портальної платформи вимагає написання досить великого обсягу шаблонного коду, найважливіші принципи можна продемонструвати на прикладі. Погляньте на сторінку, показану на малюнку нижче. Вона включає панель, що містить три елементи управління - DropDownList (властивість якого AutoPostBack встановлено в true), Label і PlaceHolder:

динамічна

Коли користувач вибирає елемент у розкривному списку, сторінка відправляє дані назад, і відповідний користувач управління динамічно завантажується і вставляється в заповнювач. Результат показаний нижче.

Код, що завантажує обраний елемент керування, виглядає так:

У цьому прикладі є низка цікавих особливостей. Оскільки PlaceHolder зберігається у форматованому контейнері, елементи керування, що завантажуються, автоматично успадковують шрифт, колір фону та інші властивості контейнера (якщо тільки вони явно не визначають власні шрифти та кольори).

Але, найголовніше, оскільки ці елементи керування завантажуються під час запускуподії Page.Load, об'єкти елемента керування можуть обробляти власні події. У цьому можна пересвідчитися, завантаживши елемент керування TimeDisplay, а потім клацнувши на посилання, щоб оновити значення часу.

Цей приклад неважко розширити до веб-сторінки, що повністю конфігурується. Для цього потрібно лише створити додаткові панелі та організувати їх на веб-сторінці, можливо, використовуючи таблиці та інші панелі для групування.