НОУ ІНТУІТ, Лекція, Побудова програм на основі веб-форм Web Forms

Елементи управління

Елементи управління є одним з найважливіших елементів концепції ASP. NET Web Forms. Власне, елементи управління ASP . NET Web Forms є об'єктами . NET Framework, які є спадкоємцями загального базового класу Control або WebControl. Зазвичай елементи управління містять у собі деяку логіку і мають алгоритм генерації HTML коду для вмісту цього елемента управління. Якщо розглянути ієрархію спадкування для типового елемента управління, можна переконатися у цьому. Наприклад, ієрархія успадкування елемента управління Calendar виглядає так.

побудова

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

Як ми вже могли переконатися, сторінка ASP . NET Web Forms є сукупністю елементів управління, кожен з яких має власну функціональність і логіку. В цьому випадку постає питання про те, який саме програмний компонент генеруватиме код HTML, який буде передаватися клієнту.

Для вирішення цього завдання в ASP. NET Web Forms використовує наступний підхід. Сторінка ( клас Page ) є контейнером елементів управління, який містить у собі всі елементи управління , які відображаються користувачеві. Кожен елемент управління (клас Control) також є контейнером для інших елементівуправління. Таким чином, елементи керування можуть бути вкладені один в одного, у зв'язку з чим вибудовується ієрархія елементів керування сторінки. Наприклад, розглянемо наступну ASPX-розмітку для сторінки.

основі

Як видно з прикладу, на формі розміщуються два елементи управлінняPanel, які мають вкладені елементи управління.

основі

Ієрархічно структуру елементів управління для цієї форми можна представити так:

інтуіт

Аналогічно рівень вкладеності може бути ще глибшим.

Для того щоб стало можливим вибудовувати подібну ієрархію елементів керування на сторінці, сторінка ( Page ) та елементи керування ( Control ) мають у складі своїх властивостей колекцію Controls , яка містить посилання на дочірні елементи керування . Наприклад, якщо потрібно отримати доступ до елементів керування на сторінці, а також до вкладених елементів керування, можна використовувати наступний код.

побудова

Таким чином,будь-якийелемент управління ASP . NET Web Forms має у собі колекцію Controls , що містить набір дочірніх елементів управління. Однак, якщо з контейнерними елементами керування (наприклад, Panel ), які за змістом повинні містити дочірні елементи керування питань не виникає, то як бути зі звичайними елементами керування, наприклад, з кнопкою (Button), міткою (Label) та іншими елементами керування, які не мають на увазі за змістом наявність дочірніх елементів управління? У цьому випадку питання вирішується досить просто – якщо елемент керування за змістом не має на увазі наявність дочірніх елементів керування, вміст його колекції Controls просто ігнорується. Рішення про те, чи потрібно ігнорувати колекцію Controlsу елемента керування приймає сам елемент керування. Цей аспект тісно пов'язаний з концепцією генерації HTML коду.

Процес генерації HTML коду сторінки полягає в наступному. Сторінка ASP. NET Web Forms (клас Page) містить набір методів "Render", які виконують генерацію HTML-коду. При виклику методу, генерується загальний каркас сторінки - теги "html", "head", "body" та ін. Після цього на сторінці починається послідовний перебір елементів керування з колекції Controls. Для кожного елемента керування, який міститься в колекції Controls, викликається метод "RenderControl". Цей метод реалізований кожного елемента управління залежно з його логіки. У процесі цього методу генерується HTML -код цього елемента управління. Якщо за змістом мається на увазі, що елемент управління може містити дочірні елементи управління, то в процесі виконання методу "RenderControl" елемент управління самостійно звертається до колекції Controls, отримує список дочірніх елементів управління і викликає метод "RenderControl" у дочірніх елементів управління. Якщо обробка дочірніх елементів керування не потрібна, колекція Controls просто ігнорується. Таким чином, для сторінки виконується рекурсивна генерація HTML-коду, при якому кожен елемент управління сам генерує власний HTML-код. Схематично цей процес можна подати так.

інтуіт

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

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

  • створення користувача елементів управління (user control);
  • створення спеціальних серверних елементів керування (custom server control).

Для створення користувача елемента керування потрібно додати його до складу проекту, використовуючи елемент меню "Add - New Item", в якому необхідно вибрати тип вмісту "Web User Control".

лекція

При створенні елемента керування за замовчуванням створюються два файли - файл розмітки (ascx) і файл коду (cs). Файл розмітки за своєю структурою дуже нагадує файл розмітки веб-форми (aspx) – у ньому також є керуюча директива ( Control ) і сама розмітка. Вміст файлу розмітки матиме такий вигляд.

При побудові елемента управління використовують ті ж підходи, що і при розробці web-сторінок. В рамках елемента управління доступні ті ж глобальні об'єкти HttpContext, Application, Session, ViewState, Request, Response, Server і т.д.

В іншому розробка користувача елемента управління нічим не відрізняється від розробки веб-форми ASP. NET Web Forms.

Після створення власного елемента керування його потрібно зареєструвати на сторінці. В іншому випадку його неможливо додати на сторінку. Для реєстрації елемента керування на сторінку додається директива Register , яка містить усі необхідні параметри. Для реєстрації користувача елемента керування директива Register повинна містити наступний набір параметрів: