69064

Архітектура веб-застосувань ASP.NET. Розробка веб-застосувань на платформі .NET

Лекция

Информатика, кибернетика и программирование

Вона містить безліч готових елементів керування застосовуючи які можна швидко створювати інтерактивні webсайти.NET Frmework і фактично є платформою для створення вебзастосувань і вебсервісів що працюють під керуванням IIS. Також істотно скорочується обсяг коду написаного уручну за рахунок...

Украинкский

2014-09-29

273.54 KB

27 чел.

Лекция №8

Основи технології ASP.NET

Архітектура веб-застосувань ASP.NET. Розробка веб-застосувань на платформі .NET

Microsoft. NET Framework – це платформа для створення, розгортання та запуску web-сервісів і застосувань. Вона надає високопродуктивне, засноване на стандартах багатомовне середовище, яке дозволяє інтегрувати існуючі застосування з застосуваннями і сервісами наступного покоління, а також вирішувати завдання розгортання і використання інтернет-застосувань. .NET Framework складається з трьох основних частин – загальномовного середовища виконання CLR, ієрархічної множини уніфікованих бібліотек класів і компонентної версії ASP, так званої ASP.NET.

ASP.NET (Active Server Pages, активні серверні сторінки) – це частина технології .NET, що використовується для написання потужних клієнт-серверних інтернет-застосувань. Вона дозволяє створювати динамічні сторінки HTML. ASP.NET виникла в результаті об'єднання старої технології ASP (активні серверні сторінки) та .NET Framework. Вона містить безліч готових елементів керування, застосовуючи які можна швидко створювати інтерактивні web-сайти. Також можна використовувати сервіси, що надаються іншими сайтами, прозоро для користувачів розроблюваного сайту. Загалом можливості ASP.NET дуже широкі.

Що таке динамічні сторінки HTML і чим вони відрізняються від статичних? Статична сторінка містить код на мові гіпертекстової розмітки HTML. Коли автор сторінки пише її, він визначає, як буде виглядати сторінка для всіх користувачів. Зміст сторінки буде завжди однаковим, незалежно від того, хто і коли вирішить її переглянути. Мови HTML цілком достатньо для відображення інформації, яка рідко змінюється і не залежить від того, хто її переглядає. Сторінка HTML – простий ASCII-текст, отже, клієнт може працювати в будь-якій ОС.

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

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

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

Більшість сторінок на ранніх стадіях розвитку Інтернету були статичними. Останні 10 років зростає кількість динамічних сторінок. І це зрозуміло: користувачі Інтернету хочуть не тільки читати готову інформацію, але бути активними дійовими особами. Наприклад, вони замовляють товари в інтернет-магазині, пишуть щоденники, беруть участь у конкурсах. Інформаційні портали оновлюють новини кожну хвилину. Динамічні сторінки можуть підлаштовуватися під конкретного користувача, а також реагувати на його дії у браузері. Яким же чином? Для цього придумано безліч технологій. Наприклад, щоб ідентифікувати користувача і зберегти його налаштування для даного сайту, застосовуються файли-cookies.

Існують мови, здатні динамічно змінювати вміст web-сторінки. З одного боку, це мови скриптів, що виконуються безпосередньо у клієнта. Приклади скриптових мов – JavaScript і VBScript. Скрипти на цих мовах вбудовані в код HTML, який сервер посилає браузеру. Сценарії, що виконуються на стороні клієнта, виділяються тегами <SCRIPT> і </SCRIPT>. Браузер інтерпретує цей код і показує користувачеві результат. Сам код можна переглянути через View Source браузера. Природно, ці програми не можуть бути більшими. Наприклад, якщо потрібно виконати пошук у базі даних, ми не можемо відправити користувачеві весь її вміст. Але скрипти можуть перевірити правильність запиту, введеного в форму, і тоді не доведеться перевантажувати сервер обробкою неправильних запитів. Деякі програмісти створюють на JavaScript анімаційні ефекти. Але виконуваних на стороні клієнта сценаріїв недостатньо для створення повноцінних динамічних сторінок. Навіть якщо на сторінці використовується JavaScript і анімовані картинки .GIF, вона називається статичною.

Динамічна web-сторінка повинна бути створена "на льоту" програмою, що виконуються на сервері. Більшість технологій Web-розробки, створених до ASP.NET, можна розділити на дві категорії:

  1.  окремі застосування, що використовуються серверними викликами (застосовується Perl у сценаріях CGI); 
  2.  сценарії, що інтерпретуються серверним ресурсом (PHP, класичне середовище ASP).

Широко застосовується механізм шлюзів CGI. CGI (Common Gateway Interface) – це специфікація інтерфейсу взаємодії Web-сервера з зовнішніми прикладними програмами, яка забезпечує засоби створення динамічних Web-сторінок на основі даних, отриманих від користувача.

Програми, написані у відповідності зі специфікацією CGI, називаються CGI-скриптами або шлюзами.

Спочатку користувач отримує статичну сторінку з формою. Як відомо, тег FORM містить атрибут ACTION. Саме він задає адресу (URL) виконуваного застосування. На сервері знаходяться виконувані файли програм, написані, наприклад, на C/С++ або Delphi, які за протоколом HTTP приймають дані з вхідного потоку або зі змінних оточення і записують в стандартний вихідний потік готову сторінку. CGI-скрипти можуть бути написані на скриптовій мовй Perl або навіть на скрипті командного рядка.

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

Звичайна CGI-програма запускається Web-сервером для виконання деякої роботи, повертає результати серверу і завершує своє виконання. Шлюз виконується так само, тільки, фактично, він ініціює взаємодію в якості клієнта з третьою програмою (див. рис.). Якщо ця третя програма є сервером БД, шлюз стає клієнтом СКБД, який надсилає запит за визначеним для порту з'єднанням з СКБД, а після отримання відповіді пересилає її WWW-серверу.

Рисунок – Схема взаємодії CGI-шлюза

При виконанні cgi-програма завантажується у пам'ять сервера, а при завершенні – видаляється. Коли 100 клієнтів одночасно звертаються до сервера, у пам'яті створюються 100 процесів, для розміщення коду кожного з яких потрібна пам'ять. Це негативно позначається на масштабованості. Нагадаємо, що масштабованість - це можливість плавного зростання часу відповіді програмної системи на запит із зростанням числа одночасно працюючих користувачів.

Для вирішення цієї проблеми Microsoft була запропонована альтернатива – ISAPI (Internet Server Application Programming Interface) розширення та фільтри. Замість виконуваних файлів використовуються DLL-бібліотеки. Код DLL знаходиться у пам'яті весь час і для кожного запиту створює не процеси, а потоки виконання. Всі потоки використовують один і той же програмний код. ISAPI-застосування виконується в процесі IIS-сервера. Це дозволяє підвищити продуктивність і масштабованість.

ISAPI-розширення можна створювати в Visual Studio C++ 6.0, користуючись майстром.

У ISAPI теж є недоліки, що відносяться до розробки. Якщо ми міняємо вихідний код dll, ми повинні його відкомпілювати і помістити у виконувану директорію сервера. Але так як попередній варіант dll знаходиться в пам'яті, необхідно зупинити сервер, щоб отримати можливість змінити файл. У цей час клієнти не зможуть отримати з сервера жоден документ, і, звичайно, будуть незадоволені.

Скриптові мови, що виконуються на стороні сервера (php та asp). Технологія asp була розроблена Microsoft у 1990-х роках.

Виконання коду asp підтримується ISAPI-розширенням сервера. У діалозі конфігурації сервера IIS визначаються способи обробки файлів з різними розширеннями. Для обробки URL-адреси з розширенням в установках сервера визначений файл asp.dll. Файли asp відправляються до нього на обробку. На вхід надходить asp, а на виході маємо потік HTML-коду.

Приклад файлу asp:

Тег <% ...%> сигналізує asp, що в ньому знаходиться код, який він повинен обробляти на сервері. Виконується скрипт на мові, яка вказана в директиві Language. Оператор <% =s%> записує текст у вихідний потік сервера – таким чином, він стає частиною HTML-сторінки, відправленої користувачеві.

Технологія ASP була обмежена за своїми можливостями. ASP використовував скриптові мови, які мають менше можливостей, ніж повнофункціональні мови програмування. Код asp був вбудований в HTML у вигляді спеціальних тегів, що створювало плутанину. Шматочки asp були розкидані по ньому, як родзинки у булці. HTML-код зазвичай створюють дизайнери, які уміють "робити красиво", а asp – програмісти, які примушують все це працювати. У ASP. NET ви можете тримати код asp і HTML ву різних файлах.

Скриптові мови не підтримують строгу типізацію. Це означає, що можна не описувати змінну до її використання, а присвоювати їй значення різних типів. Це зручно, але створює підгрунтя для помилок. Наприклад, існує змінна x1, якій присвоюється значення 1, але програміст, скажімо, помилково написав x2=1. Буде створена нова змінна x2, а значення x1 не зміниться. У мові із строгою типізацією компілятор помітить, що змінна x2 не описувалася, і видасть помилку.

У 2000 році на конференції розробників в якості частини нової технології .NET компанія Microsoft представила ASP+. З виходом .NET Framework 1.0 вона стала називатися ASP.NET.

ASP.NET є однією зі складових інфраструктури .NET Framework і фактично є платформою для створення веб-застосувань і веб-сервісів, що працюють під керуванням IIS.

ASP.NET зовні багато у чому нагадує більш стару технологію ASP, але у той же час внутрішній устрій ASP.NET істотно відрізняється від ASP. Компанія Microsoft побудувала ASP.NET на базі CLR (Common Language Runtime), який є основою всіх .NET-застосувань. Розробники можуть створювати код для ASP.NET, використовуючи мови програмування, що входять у .NET Framework: C#, Visual Basic .NET, JScript.NET та інші.

Розглянемо більш детально, чим відрізняється ASP.NET від ASP. Класичний ASP має наступні недоліки:

• Використовуються лише мови сценаріїв, які дають великий програш у продуктивності (через їх інтерпретованість) і не підтримують багато можливості об'єктно-орієнтованого програмування.

• Логіка представлення (у вигляді коду HTML) не відділена від бізнес-логіки (виконуваного коду), що призводить перемішування в одному файлі коду HTML з кодом сценарію.

• Неможливо повторно використовувати готові рішення в інших проектах (можливе тільки копіювання коду сценаріїв).

ASP. NET – це не продовження ASP. Це концептуально нова технологія Microsoft, створена в рамках ідеології .NET. У ASP.NET закладено все для того, щоб зробити весь цикл розробки web-застосування більш швидким, а підтримку – більш простою. ASP.NET заснована на об'єктно-орієнтованої технології, але зберегла модель розробки asp: розробник створюєте програму, поміщаєте її в директорію, виділену сервером, і вона буде працювати. У ASP.NET з'явилося багато нових функцій, а існуючі раніше в asp значно вдосконалені.

У ASP. NET використовуються компільовані мови. Під час компіляції перевіряється синтаксична коректність вихідного тексту. Скомпільований у проміжну мову код виконується швидше, і він буде таким же незалежним від мови, яка використовується. Компільовані мови підтримують строгу типізацію.

Компіляція відбувається на сервері в момент першого звернення користувача до сторінки. Якщо програміст змінив текст сторінки, програма перекомпілюється автоматично. При написанні коду можна використовувати набір компонентів, що поставляються з .NET.

Платформа .NET Framework надає застосуванням середовище виконання, сама безпосередньо взаємодіючи з операційною системою. Вище лежить інтерфейс ASP.NET-застосувань, на якому в свою чергу базуються web-форми (ASP.NET-сторінки) і web-сервіси. Інтерфейс. NET Framework дозволяє стандартизувати звернення до системних викликів і надає середовище для більш швидкої і зручної розробки. CLR забезпечує єдиний набір сервісів для всіх мов.

У файлах ASP.NET включається код на таких мовах програмування як C#, JScript.NET, VisualBasic.NET, що дозволяє застосовувати безпосередньо у веб-застосуваннях можливості об'єктно-орієнтованого програмування. Також істотно скорочується обсяг коду, написаного уручну за рахунок застосування серверних об'єктів, що автоматично генерують код елементів керування HTML. Можливе використання стандартного середовища розробки Visual Studio.NET, тобто ASP.NET має перевагу у швидкості у порівнянні зі сценарними технологіями, оскільки при першому зверненні код компілюється і розміщується у спеціальному кеші, а згодом тільки виконується, не вимагаючи витрат часу на парсинг, оптимізацію, тощо.

Незважаючи на можливість спільної роботи ASP і ASP.NET на одному веб-сервері, вони не можуть використовувати загальний сеанс. Файли ASP.NET обробляються бібліотекою aspnet_isapi.dll (а не asp.dll), яка, в свою чергу, використовує для виконання коду технологію .NET.

ASP.NET використовує технологію доступу до даних ADO.NET, яка забезпечує єдиний інтерфейс для доступу до баз даних SQL Server і файлам XML. Крім того, посилена модель безпеки дозволяє забезпечувати захист клієнта і сервера від несанкціонованого доступу.

У 2004 році з'явилася версія ASP. NET 2.0 (бета-версія, остаточний вихід - кінець 2005 - початок 2006 рр..). Як стверджується, ця версія дозволяє скоротити обсяг кодування на 70%. Нові можливості версії 2.0 – використання шаблонів дизайну сторінок (Master Page), спрощена локалізація web-застосувань, більше 50 нових серверних елементів керування. Цілі, які переслідували розробники нової версії, – підвищити швидкість розробки сайтів, масштабованість, легкість підтримки й адміністрування сайтів, швидкість роботи сервера. З'явилася панель оснастки MMC (консоль керування Microsoft), що надає графічний інтерфейс для керування налаштуваннями ASP.NET. Змінювати налаштування проекту тепер можна і через web-інтерфейс. ASP.NET 2.0 підтримує роботу на 64-бітних процесорах. Сервіс персоналізації (personalization) надає готове рішення для зберігання персональних даних, що безпосередньо характеризують користувача сайту, – так званого профілю користувача (Profile).

Шаблони дизайну, теми і скіни дозволяють відлагоджувати дизайн всього сайту окремо від його функціональності, теми включають графіку і каскадні таблиці стилів.

Попередні версії Visual Studio для проектів ASP. NET вимагали наявності на машині розробника сервера IIS. Тепер сервер вбудований в середовище розробки.

ASP. NET 2.0 та Visual Studio 2005 надають інструменти для легкого побудови сайтів, що локалізуються. Вони (інструменти) визначають вибір мови користувача і посилають йому сторінки на його мові.

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

У ASP. NET 2.0 вбудована технологія автоматичного оновлення кешування баз даних. Дані, отримані з бази, зберігаються на сервері, і він не звертається до бази для обробки повторного запиту. При зміні бази даних кеш оновлює свій вміст.

ASP. NET – це технологія, а не мова, яка дозволяє програмувати на різних мовах – С#, Visual Basic, J#. "У платформі. NET всі мови рівні, але деякі - рівніші" (Дж. Оруелл). Ось такою мовою і є С#, тому що він був спеціально створений для цієї платформи. Програмування C# дозволяє повною мірою використовувати концепції, методи і патерни об'єктно-орієнтованої розробки. Мова Visual Basic 8.0 наділений майже тими ж можливостями. Щоб навчитися ASP.NET, вам потрібно знати основи HTML, а знання ASP не обов'язково. Воно може навіть перешкодити, оскільки доведеться змінювати спосіб мислення. Також для розуміння бажано знати CSS і JavaScript.

Процес інсталяції. ASP. NET 2.0 можна встановити на комп'ютерах з ОС Windows 2000 з Service Pack 4, Windows XP з Service Pack 2 і пізнішими версіями Windows. Готові сайти краще встановлювати на Windows Server 2003.

Для розробки програми можна використовувати будь-яке середовище розробки або навіть текстовий редактор, за умови, що у вас є доступ до IIS. Якщо ж ви хочете задіяти всю міць Microsoft .NET Framework та ASP.NET і при цьому витратити якомога менше зусиль, то потрібно скористатися середовищем розробки, спеціально створеної для програмування ASP.NET 2.0.

Якщо ви придбаєте Visual Studio. NET 2005, то для роботи достатньо буде тільки його. .NET Framework міститься на дисках. У його склад входить Visual Web Developer, який дозволяє створювати професійні web-застосування, а також desktop-застосування на різних мовах програмування. Продукти Microsoft випускаються на DVD, але є набір з двох CD від "Мегасофт". Visual Studio. NET 2005 вимагає близько 2 Гб дискового простору. При цьому інсталюється ASP. NET 2.0, середовище розробки, SQL Server Express, вбудований web-сервер, Crystal Reports із спеціальними елементами управління для ASP. NET 2.0.

Безкоштовно поширюване програмне забезпечення. Visual Web Developer 2005 Express Edition – вільно розповсюджуване середовище, призначене для новачків і студентів. Список відмінностей VWD від Visual Studio .NET 2005 невеликий і для початківців неістотний.

У якості середовища розробки ви можете вибрати WebMatrix. Ця програма поєднує в собі редактор і HTTP-сервер. У WebMatrix інсталятор розміром всього 1,2 Мб, але у нього менше можливостей, ніж у VWD. Але, загалом, ці середовища розробки схожі. У WebMatrix є неприємна особливість – вона дає запит на збереження закриваються файлів, які не редагувалися. VWD Express дозволяє одним натисненням кнопки відкрити web-інтерфейс конфігурування проекту. У VWD працює технологія IntelliSense, яка автоматично пропонує можливі в даному місці елементи коду.

Якщо ви вирішили працювати з WebMatrix, ви повинні встановити на своїй машині. NET Framework 2.0 і ASP. NET 2.0.

Якщо у вас операційна система Windows Server 2003, то. NET Framework вже попередньо встановлено.

IIS може знадобитися, якщо вам потрібний повноцінний сервер для роботи в Інтернеті, а не просто на своєму комп'ютері або в локальній мережі, або якщо ви вирішили набирати текст у звичайному редакторі. Для роботи на своєму комп'ютері у всі ці середовища розробки вбудований сервер Cassini, який спочатку з'явився як частина WebMatrix. Символ WebMatrix – планета Сатурн, а Кассіні - відомий дослідник Сатурна. Попередні версії Visual Studio вимагали наявності IIS, але тепер Cassini вбудований і в Visual Studio 2005, що дозволяє працювати навіть в Windows XP Home Edition.

Приклади будуть даватися як для WebMatrix, так і Visual Studio. Деякі приклади вимагають VWD Express або Visual Studio.

Архітектура веб-застосувань у ASP.NET. Типи застосувань. У ASP.NET можна створювати різні типи проектів ASP.NET, в тому числі веб-сайти, веб-додатки, веб-служби і серверні елементи управління Ajax.

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

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

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

Файл проекту веб-застосування спрощує реалізацію деяких скриптів. Наприклад, можна розділити одне застосування ASP.NET на кілька проектів Visual Studio, створивши посилання на файли в різних файлах проектів. Також можна легко виключити файли з проекту.

В основу розробки веб-застосувань на ASP.NET покладена модель поділу коду представлення та коду реалізації, рекомендована Майкрософт при створенні динамічних документів за допомогою програмних кодів. Це робиться шляхом розміщення програмного коду або в окремий файл, або всередині спеціального тега для сценаріїв. Файл такого роду зазвичай має розширення *.aspx.cs (*.aspx.vb) і має ім'я, що збігається з ім'ям основного ASPX файлу. В принципі такий підхід дозволяє веб-дизайнеру сконцентруватися роботі з кодом розмітки документа з мінімальними змінами програмного коду, в звичайному ASP впроваджуваного безпосередньо в код розмітки.

Кожне веб-застосування (і веб-сайт), що розробляється на ASP.NET складається з інформаційної частини, програмного коду та відомостей про конфігурацію.

Інформаційна частина містить статичні і динамічні елементи html сторінки і реалізується у вигляді Web-форм. Статичні елементи являють собою типові елементи мови html, динамічні ж компонуються програмним кодом застосування під час його виконання (наприклад, запити до бази даних).

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

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

Основним елементом Web-застосування є Web-форма (або Web-сторінка), яка, з одного боку, схожа на Windows-форму, оскільки дозволяє розміщувати всередині себе різні елементи керування, здатні відображати дані і реагувати на дії користувача, а з іншого – являє собою HTML-сторінку, тому що містить всі її атрибути. Описи елементів керування представляються в коді HTML-сторінки у вигляді спеціальних тегів.

При розробці Web-застосувань на основі ASP.NET можливі два варіанти організації Web-форм.

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

У другому випадку кожна Web-сторінка розділяється на дві частини: Web-форму і файл, що містить програмний код. При цьому форма, як і в першому випадку, зберігається у файлі з розширенням .aspx, а програмний код – в файлі з розширенням .cs. Така модель забезпечує кращу організацію елементів Web-застосування за рахунок відділення для інтерфейсу користувача від програмної логіки.

Приклад 1. Структура ASP.NET-сторінки при розділенні коду

Форма знаходиться у файлі Default.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

   <title></title>

</head>

<body>

   <form id="form1" runat="server">

   <div>

           <asp:Label ID="Time" runat="server" Text="Сервер знаходиться у Києві. Зараз "></asp:Label>

       </div>

   </form>

</body>

</html>

Розберемо цю сторінку. Перший рядок коду містить <% @Page Language="C#"%>. Тег <% завжди призначається для інтерпретації ASP-коду. Директива Page завжди присутня на сторінці aspx. Її атрибут Language – це вказівка, що в скриптах даної сторінки буде використовуватися мова C# (а могли б VB, C++ або J#). CodeFile – ім'я файлу з відокремленим кодом (code-behind). Inherits – клас, визначений у тому файлі, від якого успадковується клас сторінки.

Одночасно буде створений і файл Default.aspx.cs.

Це технологія розділення коду, про яку ми вже говорили. Сама форма знаходиться у файлі Default.aspx, а у файлі Default.aspx.cs знаходиться клас сторінки на мові C#. Таким чином, дизайн сторінки може бути змінений не зачіпаючи коду сторінки, що дозволяє розділити відповідальність за зовнішній вигляд і роботу сторінки між дизайнером і програмістом.

<form runat="server">

Цей тег дає вказівку компілятору обробляти елементи керування сторінки. Зверніть увагу на те, що даний тег має властивість runat, для якої встановлено значення "server" (інших значень не буває). При використанні цієї властивості елемент керування обробляється компілятором, а не передається браузеру "як є". Присутність атрибуту runat перетворює HTML-тег у серверний елемент (в даному випадку – екземпляр класу HtmlInputControl).

У файлі Default.aspx між тегами <form> та </form> міститься тег, що задає елемент керування Label:

<asp:Label ID="Time" runat="server" Text="Сервер знаходиться у Києві. Зараз "></asp:Label>

Серверний елемент керування Label є засобом розміщення на сторінці тексту, який може містити теги HTML. Змінюючи значення властивостей цього елемента керування у коді, можна динамічно змінювати текст на сторінці. У asp: Label компілятору повідомляється, з яким об'єктом ведеться робота (у даному випадку з елементом керування Label).

Далі задаються різні властивості елемента керування. В першу чергу визначається його ім'я id="Time" і атрибут "runat", а також текст.

У файлі Default.aspx.cs міститися такий текст:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

namespace WebApplication

{

   public partial class WebForm1 : System.Web.UI.Page

   {

       protected void Page_Load(object sender, EventArgs e)

       {

           Time.Text += DateTime.Now.ToString ();

       }

   }

}

Ключове слово partial з'явилося у C# 2.0 і дозволяє розбити текст визначення класу між різними файлами.

System.Web.UI.Page – клас, базовий для всіх сторінок ASP. NET.

Вставимо у цю функцію строчку

У цій програмі використовується цей клас System.DateTime бібліотеки класів FCL, як в будь-якій програмі на C#. Отже, будь-який клас .NET доступний і в локальних, і в розподілених застосуваннях.

Отримане значення присвоюється властивості Text об'єкта Time. Це елемент керування типу Label (мітка), який вставили у форму. Час на годиннику клієнта і сервера може не збігатися, якщо вони знаходяться в різних точках земної кулі.

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

Запустіть сторінку на перегляд кнопкою F5 або натиснувши на кнопку зі стрілкою на панелі інструментів. У браузері повинна відкритися сторінка, на якій буде написано поточний час. Якщо відкрийти вихідний текст сторінки, то ніякого коду на С# або елементів керування ASP.NET там не буде.

Якщо обновити сторінку, то можна буде побачити нове значення часу.

Приклад 2. Структура ASP.NET-сторінки без розділення коду

<!-- Раздел директив -->

<% @Page Language=”C#” %>

<!-- Раздел кода -->

<script runat=”server”>

private void fun(object sender, EventArgs e)

{

TheResult.InnerText=(text1.Value).ToUpper();

}

</script>

<!-- Раздел пользовательского интерфейса -->

<html>

<head><title>Пробная страница</title></head>

<body>

<h1>Заголовок</h1>

<form runat=”server”>

<input runat=”server” id=”text1” type=”text” />

<input runat=”server” id=”button1” type=”submit”

value=”Выполнить” OnServerClick=”fun” />

</form>

<p><b>Результат: </b><span runat=”server” id=”TheResult” />

</body>

</html>

Тег <input> з атрибутом runat перетворює HTML-тег в серверний елемент (в даному випадку – екземпляр класу HtmlInputControl). Цей елемент має властивість Value, в якому міститься текст, що вводиться.?

Атрибут runat у тегу <form> організовує повернення даних на сервер цій же формі (називається PostBack). Прочитані дані з <input> присвоюються властивості Value новоствореного екземпляра класу HtmlInputControl. Потім виконується код в <script> (функція fun), викликаний подією OnServerClick="fun".

Функція переводить символи у верхній регістр і присвоює отриманий рядок властивості InnerText серверного елемента з ідентифікатором id="TheResult". В результаті роботи серверних елементів і їх подій генеруються HTML-теги, що вбудовуються у розділ користувацького інтерфейсу. Отримана HTML-сторінка повертається клієнтові.

Результати роботи наведено на слайді.

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

Рисунок – Типовий сценарій взаємодії елементів Web-застосування з клієнтом

Як видно з рисунка, при зверненні клієнта до Web-застосування останнє запускається на сервері IIS. Запущене застосування формує відгук. Для цього на сервері створюється екземпляр запитаної Web-форми, вона генерує HTML-текст відгуку, який і передається браузеру клієнта. Відразу після цього екземпляр Web-форми знищується. Користувач, отримавши HTML-сторінку, що була згенерувана застосуванням, має можливість заповнювати різні поля форми (тестові поля, перемикачі тощо). Після заповнення всіх необхідних полів форми користувач ініціює відправку даних, введених ним на сторінці, назад на сервер. Це відбувається за рахунок використання технології зворотного відсилання, яка викликається при виконанні певних дій (наприклад, натисканні на кнопку). Отримавши дані від користувача, сервер створює новий екземпляр Web-форми, заповнює його отриманими даними і обробляє всі необхідні події. По закінченні обробки сервер формує HTML-код відповіді і відправляє його клієнту, а потім знищує екземпляр Web-форми.

В момент закінчення роботи з Web-застосуванням користувач або закриває браузер, або переходить на іншу інтернет-сторінку. У цей момент завершується сеанс роботи користувача з даним застосуванням, проте саме застосування завершується сервером не відразу після закінчення останнього сеансу роботи користувача. Це пов'язано з керуванням розподілом пам'яті платформою .NET Framework, яке засноване на періодичній перевірці посилань об'єктів. Якщо в результаті такої перевірки виявиться, що об'єкт більше не використовується, сервер знищує його, звільняючи таким чином займану ним пам'ять. Тому не можна точно сказати, коли саме настане подія Application_End для даного Web-застосування.

Такий принцип організації виконання Web-застосувань добре підходить для масштабованих застосувань з інтенсивним мережевим обміном. Однак у нього є і недоліки. Зокрема, виявляється неможливим зберігати дані, що належать формі, навіть протягом роботи користувача з застосуванням. Тобто якщо потрібно створити якусь змінну, яка зберігає, наприклад, ідентифікатор замовлення, з яким користувач зараз працює, зробити це буде неможливо, тому що форма після відправки клієнтові відразу ж знищується. Щоб обійти цей недолік, ASP.NET використовує спеціальний механізм для збереження даних, введених в елементи керування Web-форми. За цим принципом в рамках кожного запиту на сервер відправляються всі дані, які були введені в елементи керування. При цьому на сервері виникає подія Page_Init, метою якої є створення Web-форми і її ініціалізація. У процесі ініціалізації в елементи керування створеної форми записуються передані від клієнта дані. Тепер ці дані стають доступні застосуванню за допомогою обробки події Page_Load, що виникає при кожному зверненні до сторінки.

Етапи обробки Web-форм

З боку сервера обробка Web-форми ASP.NET відбувається поетапно. На кожному етапі генеруються різні події. Це дозволяє сторінці включитися в потік обробки на будь-якому етапі і видати відповідь будь-яким зручним способом.

Основні етапи потоку обробки:

  1.  Ініціалізація структури сторінки.
  2.  Ініціалізація коду користувача.
  3.  Перевірка достовірності.
  4.  Обробка подій.
  5.  Автоматична прив'язка даних.
  6.  Очищення.

Слід пам'ятати, що ці етапи проходять незалежно для кожного Web-запиту. На рисунку показаний порядок розгортання цих етапів. Тут наведені не всі етапи, а лише ті, які зазвичай використовуються при програмуванні власних елементів керування ASP.NET і не обробляються безпосередньо сторінкою.

Ініціалізація структури сторінки. На цьому етапі ASP.NET створює сторінку. Генеруються всі елементи керування, визначені в дескрипторах на Web-сторінці .аspx. Більш того, якщо сторінка запитується не вперше (інакше кажучи, якщо це зворотнє відсилання), ASP.NET десеріалізує інформацію про стан виду і застосовує її до всіх елементів управління.

На цьому етапі запускається подія Page.Init. Проте ця подія рідко обробляється Web-сторінкою, оскільки ще занадто рано виконувати ініціалізацію сторінки. Причина в тому, що об'єкти елементів управління ще не створені, а інформація про стан виду ще не завантажена.

Ініціалізація коду користувача. На цьому етапі запускається подія Page.Load. Більшість Web-сторінок обробляють цю подію для виконання будь-якої необхідної ініціалізації, подібної заповненню динамічних текстових полів або конфігурування елементів керування.

Подія Page.Load запускається завжди, незалежно від того, запитується сторінка вперше або ж як частина зворотного відсилання. На щастя, ASP.NET дозволяє програмістам розрізняти події першого завантаження сторінки і всі наступні завантаження. Чому це важливо? По-перше, оскільки стан виду підтримується автоматично, вам необхідно витягувати свої дані з джерела динамічних даних тільки при першому завантаженні сторінки. Під час зворотного відсилання ви можете дозволити ASP.NET самостійно відновити властивості елементів керування зі стану виду. Це може значно збільшити продуктивність, якщо інформацію досить "дорого" відновити (наприклад, якщо її необхідно запросити з бази даних). По-друге, існують також інші сценарії, наприклад, форми редагування та сторінки деталізації, для яких потрібно відображати один інтерфейс при першому використанні сторінки і інший інтерфейс при подальших її завантаженнях.

Для визначення поточного стану сторінки можна перевірити властивість Page.IsPostBack, яке буде мати значення false при першому запиті сторінки, наприклад:

if (! Page.IsPostBack)

{

//Ініціалізувати елементи управління при першому зверненні

//Цілком безпечно.

FirstName.Text = "Enter your name here";

}

Примітка. IsPostBack є статичним властивістю класу Page. Воно завжди повертає інформацію, засновану на поточній сторінці. Можна також використовувати властивість примірника IsPostBack (як в this.IsPostBack), що повертає таке ж значення. Який підхід вибирати, залежить від ваших уподобань.

Слід пам'ятати, що в стані виду зберігається кожна змінена властивість. Ініціалізація елемента керування в подію Page.Load вважається зміною, тому будь-яке змінене значення елемента керування буде збережено в стані виду, що без потреби збільшує розмір сторінки і сповільнює час передачі даних. З метою прискорення підготовки стану виду і мінімізації розмірів сторінок уникайте ініціалізації елементів керування в коді. Навпаки, встановлюйте властивості в дескрипторі елемента керування (вручну або у вікні Properties). В результаті ця інформація не буде зберігатися у стані виду. У тих випадках, коли дійсно легше ініціалізувати елемент керування в коді, відключіть стан виду для елемента керування, встановивши EnableViewState рівним false і ініціалізувавши елемент керування кожного разу при запуску події Page. Load незалежно від того, чи є поточний запит зворотного відсиланням.

Перевірка достовірності. У ASP.NET представлені нові елементи управління перевіркою достовірності, автоматично перевіряючі достовірність інших користувальницьких елементів керування введенням і відображають повідомлення про помилки. Ці елементи управління запускаються після завантаження сторінки, але перед будь-якими іншими подіями. Однак елементи керування перевіркою достовірності в більшості випадків самодостатні, що означає, що вам не потрібно відповідати на події перевірки достовірності. Натомість можна просто перевірити достовірність сторінки (з використанням властивості Page.IsValid) в іншому обробнику подій. У розділі 4 елементи управління перевіркою достовірності розглядаються більш докладно.

Обробка подій. На цьому етапі сторінка вже, повністю завантажена і перевірена на достовірність. Тепер ASP.NET запустить всі події, що відбувалися з часу останньої зворотного відсилання. У більшості випадків існують два типи подій ASP.NET:

- Події, що вимагають негайної відповіді. Включають клацання на кнопці Submit або якийсь інший кнопці, області зображення або ж посиланню в елементі керування Web, запускає зворотний відсилання викликом JavaScript-функції __ doPostBack ().

- Події зміни. Включають зміну вибору в елементі керування або тексту в текстовому полі. Ці події запускаються негайно для елементів управління Web, якщо AutoPostBack встановлений рівним true. В іншому випадку вони запустяться при наступній зворотної відсилання сторінки.

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

Наприклад, припустимо, що у вас є сторінка з кнопкою Submit і текстовим полем без автоматичного зворотного відсилання. Ви змінюєте текст у текстовому полі та клацаєте на кнопці Submit. У цей момент ASP.NET запускає наступні події в такому порядку:

Page.Init

Page.Load

TextBox.TextChanged

Button.Click

Page.PreRender

Page.Unload

Запам'ятовування цієї інформації може бути вирішальним в полегшенні роботи програміста ASP.NET. У керованої подіями моделі є як плюси, так мінуси. Переваги полягають у тому, що модель подій надає більш високий рівень абстракції, що позбавляє код від стереотипних фрагментів підтримки стану. Недолік полягає у тому, що дуже легко забути про те, що модель подій насправді є просто емуляцією. Це може привести до некоректного припущення (наприклад, очікування того, що інформація залишиться в змінних екземплярах) або ж погано спрацює проектне рішення (наприклад, збереженню великої кількості інформації в стані виду).

Автоматична прив'язка даних. Пізніше ми ознайомимося з елементами керування джерелами даних (що є новим в ASP.NET 2.0), що автоматизують процес прив'язки даних. При використанні елементів управління джерелами даних ASP.NET автоматично виконує оновлення та запити до вашого джерела даних як частина життєвого циклу сторінки.

Існують два типи операцій з джерелами даних. Будь-які зміни (вставки, видалення або оновлення) виконуються після обробки всіх подій елементів керування, але безпосередньо перед генерацією події Page.PreRender. Після запуску події Page.PreRender елементи управління джерелами даних виконують свої запити і вставляють витягнуті дані в будь-які пов'язані елементи управління. Ця модель має сенс, оскільки виконання запитів перед виконанням оновлень може призвести до старіння даних на вашій Web-сторінці. Однак ця модель також вводить необхідне обмеження - у жодного з решти обробників подій не буде доступу до найбільш новим даним, оскільки вони ще не були витягнуті.

Це остання зупинка у життєвому циклі сторінки. Історично склалося так, що подія Page.PreRender позначає останню дію перед перетворенням сторінки в HTML (хоча, як ви тільки що дізналися, деяка робота по прив'язці даних все ще може відбуватися після етапу, що передує перетворенню). Під час попереднього етапу перед перетворенням об'єкти сторінки і елементів управлінні все ще доступні, тому ви можете виконувати остаточні дії начебто збереження додаткової інформації у стані виду.

Очищення. В кінці свого життєвого циклу сторінка перетвориться в HTML. Після цього починається реальне очищення і запускається подія Page.Unload. У цей момент об'єкти сторінки все ще доступні, але остаточний HTML вже згенерований і не може бути змінений.

Згадайте, що у .NET Framework є служба збірки сміття, яка періодично запускається для звільнення пам'яті, зайнятої об'єктами, на які вже немає посилань. Якщо необхідно звільнити будь-які некеровані ресурси, слід переконатися, що це робиться явно на етапі очищення або ж перед ним. Коли збирач сміття знищує сторінку, запускається подія Page.Disposed. Це завершення життєвого циклу Web-сторінки.

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

- При запиті сторінки ASPX ініціюється подія Page_Init, яка провадить початкову ініціалізацію сторінки та її об'єкта.

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

- Далі виконується перевірка валідності елементів сторінки з точки зору коректності введених користувачем даних.

- І, нарешті, іде обробка всіх подій, пов'язаних з діями користувача з моменту останнього зворотного відсилання.

Ініціалізація структури сторінки

Ініціалізація коду користувача

Очищення

Обробка подій (Event handling)

Перевірка достовірності

Браузер видає запит

Браузер отримує відповідь

Для збереження даних веб-сторінки у проміжках між зверненнями до неї в ASP.NET використовуються стану відображення (view state).

Якщо дані, введені у веб-форму, необхідно зробити доступними іншим веб-формам того ж застосування, ці дані необхідно зберегти в об'єктах Application та Session. Об'єкти Application доступні всім користувачам програми та можуть розглядатися як глобальні змінні, звернення до яких можливо з будь-яких сеансів. Об'єкти Session доступні тільки в рамках одного сеансу, і тому вони виявляються доступними лише одному користувачеві.

Клас Page. Його властивості та методи. Усі елементи керування, з яких складається Web-застосування, додаються до контейнеру, роль якого виконує сторінка застосування. Сторінка відповідає за генерацію HTML-коду, переданого згодом клієнтові. Однак при цьому кожен елемент керування відповідає за генерацію своєї частини HTML-коду, що описує саме цей елемент всередині сторінки. Можна сказати, що сторінка ніби керує процесом створення сторінки, змушуючи кожен елемент керування генерувати свою частину коду. У ASP.NET будь-яка сторінка є екземпляром класу Page.

Клас Page грає виключно важливу роль в ASP.NET, оскільки за допомогою нього здійснюється доступ до великої кількості об'єктів, що використовуються для керування сторінками Web-застосування.

Тепер, коли ви досліджували життєвий цикл сторінки і дізналися, яким чином в ній зберігаються елементи управління, слід зазначити, що сама сторінка також створюється як екземпляр об'єкту елемента керування. В дійсності всі Web-форми є екземплярами класу ASP.NET Page, який можна знайти в просторі імен System.Web.UI.

Ви напевно вже виявили це, зауваживши, що кожен клас прихованого коду явно породжений від System.Web.UI.Page. Це означає, що кожна створювана вами Web-форма забезпечується величезною кількістю нових функцій. Статичний метод FindControl() і властивість IsPostBack – два приклади, з якими ви вже ознайомилися. Більш того, породження від класу Page надає доступ до наступних виключно корисним властивостям і методам:

Application

Зберігання даних у змінних стану застосування.

Cache

Керування кешуванням відгуків на сервері.

Controls

Отримання елементів керування сторінки.

Request

Читання запитів та отримання з поточного запиту об’єктів Browser, Cookies, Files, ClientCertificates.

Response

Запис тексту та даних у відгук, отримання з поточного відгуку об’єктів Cache, Cookies, Output.

Server

Обробка запитів та відгуків, допоміжні методи кодування та декодування URL.

Session

Збереження елементів даних у змінних стану сеанса.

Trace

Включення і виключення трасування, запис подій трасування у журнал.

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

Session, Application та Cache. Об'єкт Session є екземпляром класу System.Web.SessionState.HttpSessionState. Він призначений для зберігання будь-якого типу даних користувача, який повинен постійно існувати між запитами Web-сторінок. Об'єкт Session надає словниковий доступ до набору пар ім'я-значення, що представляє для користувача дані для цього сеансу. Стан сеансу часто застосовується для обслуговування інформації на зразок імені та ідентифікатора користувача, купівельної корзини або інших елементів, що видаляються, коли користувач вже не відвідує сторінки Web-сайту.

Об'єкт Application є екземпляром класу System.Web.HttpApplicationState. Як і об'єкт Session, це також словник даних ім'я-значення. Однак ці дані глобальні для всього застосування.

Нарешті, об'єкт Cache є екземпляром класу System.Web.Caching.Cache. У ньому також зберігається глобальна інформація, але він надає більш масштабований механізм зберігання, оскільки ASP.NET може видаляти об'єкти в разі нестачі пам'яті сервера. Як і інші набори станів, це по суті, колекція об'єктів ім'я-значення, проте тут для кожного елемента можна також встановлювати спеціалізовані політики закінчення терміну і визначати залежності.

Вибір способу реалізації управління станом є одним з ключових завдань розробки Web-застосувань.

Request. Об'єкт Request є екземпляром класу System.Web.HttpRequest. Цей об'єкт надає значення і властивості HTTP-запиту, які викликали завантаження сторінки. Він містить всі параметри URL та іншу інформацію, що відправляється клієнтом. Велика частина інформації, наданої об'єктом Request, поміщена в оболонки абстракцій вищого рівня (наприклад, модель елементів керування Web ASP.NET), тому вона не так само важлива, як у класичній ASP. Однак можете використовувати об'єкт Request, щоб виявити, який браузер використовується клієнтом, або ж встановити та дослідити cookie-набори.

Response. Об'єкт Response є екземпляром класу System.Web.HttpResponse і представляє відповідь Web-сервера на запит клієнта. У класичній ASP об'єкт Response був єдиним способом програмної передачі HTML-тексту клієнтові. Тепер серверні елементи керування містять вкладені об'єктно-орієнтовані методи для самостійної генерації свого коду. Необхідно лише встановити їх властивості, внаслідок чого об'єкт відповіді буде грати практично центральну роль.

HttpResponse все ще надає деякі важливі функції – наприклад, засоби роботи з куки-наборами та метод Redirect(). Метод Redirect() дозволяє перенаправити користувача на іншу сторінку, наприклад:

//Можна перенаправити на файл у поточному каталозі.

Response.Redirect("newpage.aspx");

//Можна перенаправити на інший веб-сайт.

Response.Redirect ("http://www.prosetech.com");

Метод Redirect() вимагає повного циклу. По суті, він відправляє повідомлення браузеру, яке змушує його запитати нову сторінку. Якщо необхідно перенаправити користувача на іншу сторінку в тому ж веб-застосуванні, можна скористатися більш швидким підходом за допомогою методу Server.Transfer().

Server. Об'єкт Server є екземпляром класу System.Web.HttpServerUtility. Він надає різноманітні допоміжні методи і властивості. Наприклад, Метод Transfer() є найбільш швидким способом переміщення користувача на іншу сторінку вашого застосування. При використанні цього методу не відбувається повного циклу. Замість цього механізм ASP.NET просто, завантажує нову сторінку і починає її обробку. В результаті URL відображається в браузері клієнта, не змінюється.

//Можна перемістити на файл в поточному Web-застосуванні.

Server.Transfer("newpage.aspx");

//Переміщатися на інший веб-сайт не можна.

//Це викличе помилку.

Server.Transfer("http://www.prosetech.com");

Trace. Об'єкт Trace є універсальним об'єктом трасування (і екземпляром класу System.Web.TraceContext). Він дозволяє записувати інформацію в журнал на рівні сторінок. Цей журнал містить докладну інформацію про синхронізацію, щоб ви не тільки могли бачити об'єкт Trace для налагодження, але й використовувати його для моніторингу продуктивності і синхронізації. Більш того, журнал трасування також містить набір різноманітної інформації, організованої в кілька розділів. У табл. 3.5 описана вся інформація, яку ви побачите.

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

Синтаксис оголошення директив такий:

<% @ [Directive] [Attribute = Value]%>

Можна оголосити кілька директив одночасно:

<% @ [Directive] [Attribute = Value] [Attribute = Value]%>

У ASP. NET 2.0 існує 11 директив. Поки що детально розгляднемо дві – Page и Import.

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

Найбільш важливі атрибути директиви перераховані в таблиці:

AutoEventWireup

Автоматична обробка подій сторінки

Buffer

Керує буферізацією сторінки. За промовчанням буферизується

ClassName

Дозволяє призначати імя класу, сгенерованого даною сторінкою

CodeFile

Назва файлу з відокремленим кодом для даної сторінки

Culture

Налаштовує набір регіональних параметрів, тобто мову, формат валюти, дати, чисел

Debug

Якщо true, на сторінку виводиться інформація відлагодження

Trace

Вивід інформації трасування

EnableViewState

Сбереження стану сторінки. За промовчанням вона зберігається

EnableTheming

Дозволяє включити або виключити підтримку тем оформлення. За промовчанням включено

Inherits

Клас, від якого успадковуєся клас даної сторінки у технології відокремлення коду

IsAsync

Показує, чи обробляється сторінка асинхронно

Language

Мова, використовувана у вбудованому коді

WarningLevel

Найбільш допустимий рівень попереджень компілятора

CompilerOptions

Опції компілятора

Простори імен бібліотеки класів. Бібліотека класів FCL містить тисячі класів. Для зручності використання вони об'єднані в простори імен. Щоб звертатися до класів, оголошених у просторі імен, без зазначення повного шляху, його потрібно імпортувати у проект. Якщо, наприклад, необхідно працювати з файлами формату XML, потрібно імпортувати простір імен System.XML. У сторінках відокремленого коду на C#, як завжди, використовується директива using.

using System.XML;

На сторінці aspx – директива Import

<% @ Import Namespace = "System.XML"%>

Для кожного простору імен потрібна окрема директива Import.

Visual Studio. NET і VWD за промовчанням включають у сторінку на C# найчастіше використовувані простори імен: System, System.Data, System.Configuration, System.Collections, System.Web, System.Web.Security, System.Web.UI, System.Web.UI.WebControls, System.Web.UI.WebControls.WebParts, System.Web.UI.HtmlControls. На сторінку aspx імпортувати ці простори імен не вимагається.

Наприклад, у просторі імен System.Web.UI знаходиться клас Page, без якого не може існувати жодна сторінка ASP. NET, в System.Web – класи HttpRequest і HttpResponse.

Серверні елементи керування

Одна з найважливіших задач web-розробника – отримання і обробка даних, введених користувачем. Інформація надсилається серверу через форму. Форма містить елементи керування, які дозволяють різними способами вводити інформацію.

Форми застосовуються у більшості сайтів. Наприклад, якщо необхідно написати лист в web-інтерфейсі, з'являється форма з текстовими полями, відповідними адресату, темі і тексту листа. Натисканням на кнопку можна додати прикладений файл або послати лист кнопкою Send.

Форма HTML містить, наприклад, текстове поле, випадаючий список, перемикачі (radiobuttons) і прапорці (checkbox), кнопки.

Форми ASP.NET відрізняються від звичайних форм наявністю властивості runat="server". Вони обробляються ASP. NET на сервері. Форми є одним з полів сторінки. На сторінці знаходяться елементи керування. Багато з них повинні розташоватись всередині форми. ASP.NET дозволяє запам'ятовувати стан елементів керування, тобто текст, який був введений в текстове поле, або вибраний перемикач, передавати його на сервер і назад на сторінку після її оновлення:

<form ID="FormVote" runat="server"> </ form>

Усі форми обробляються методом POST. Атрибут Action можна задавати, але не обов'язково. За промовчанням це поточна сторінка.

У елементів керування ASP.NET теж є властивість runat="server". Інший обов'язковий атрибут – це його ідентифікатор, або ID. Він потрібен, щоб звертатися до елементу в програмі, тобто це ім'я члена сторінки, за яким можна його ідентифікувати. Приклади ми вже бачили в попередніх лекціях.

ASP.NET пропонує безліч серверних елементів керування, які розділені на кілька категорій. Розглядаються елементи керування наступних категорій:

Елементи керування HTML

Стандартні або серверні елементи керування 

Елементи перевірки даних – верифікація введених даних.

Елементи керування перевіркою достовірності. Цей набір елементів управління дозволяє швидко перевірити достовірність пов'язаного елементу управління введення на предмет дотримання декількох стандартних або користувальницьких правил. Наприклад, ви можете вказати, що введення не може бути порожнім, що це має бути число, що воно не повинно перевищувати певне значення, і тому подібне. Якщо перевірка достовірності не вдається, ви можете запобігти обробку сторінки або дозволити цим елементам управління відображати повідомлення про помилки на сторінці. У Visual Studio ці елементи керування можна знайти на вкладці Validation (Перевірка достовірності) панелі інструментів.

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

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

Логіни і паролі. Елементи керування входом в систему. Ці елементи управління підтримують аутентифікацію за допомогою форм, модель ASP.NET для аутентифікації користувачів у базі даних і відстеження їхнього стану. Замість написання своїх власних інтерфейсів для роботи з аутентифікацією за допомогою форм можена використовувати ці елементи керування для роботи з налаштованим сторінками входу в систему, відновлення паролів і майстрів створення користувачів. Елементи керування входом в систему будуть розглядатися в розділі 21.

Елементи керування Web Parts. Цей набір елементів управління підтримує Web Parts - модель ASP.NET для побудови компонентних, легко конфігуруються Web-порталів.

Користувацькі елементи керування – створені користувачем.

Мобільні елементи управління ASP.NET. Елементи керування цього набору нагадують елементи управління Web, але налаштовані на підтримку мобільних клієнтів, наприклад, КПК (PDA), смартфонов і тому подібного, шляхом перетворення сторінок в стандарти розмітки зразок HTML 3.2 або WML 1.1. Мобільні елементи управління володіють високим ступенем адаптації, тобто при створенні сторінки з використанням цих елементів керування сторінка може перетворюватися кількома різними способами в залежності від пристрою, який отримує доступ до неї. (Ця концепція також використовується в звичайних елементах управління Web, але в меншому масштабі. Вони можуть генерувати XHTML або HTML 4.01 з JavaScript-кодом або ж простий код HTML 3.2 у відповідності з можливостями браузера клієнта.)

Ієрархія серверних елементів керування. Всі серверні елементи керування успадковані від базового класу Control з простору імен System.Web.UI. Це відноситься до серверних елементів управління HTML, елементам управління Web, вашим власним спеціалізованим елементам управління, а також класу Page, від якого походять всі форми.

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

Властивість

Опис

ClientID

Повертає ідентифікатор елемента, який є унікальним ім'ям, створеним ASP.NET при створенні екземпляра сторінки.

Controls

Повертає набір дочірніх елементів керування. Вони також можуть бути контейнерними елементами керування, що містять інші дочірні елементи управління.

EnableViewState  

Повертає або встановлює булеве значення, яке вказує на те, чи повинен елемент керування підтримувати стан виду за допомогою зворотніх посилань своєї батьківської сторінки. За промовванням властивість має значення true.

ID

Повертає або встановлює ідентифікатор елементу керування. На практиці це ім'я, за допомогою якого, можна отримати доступ до елемента керування з серверних сценаріїв або класу прихованого коду.

Page

Повертає посилання на об'єкт батьківської сторінки.

Parent

Повертає посилання на батька елемента керування, яким може бути сторінка або інший контейнерний елемент керування.

Visible

Повертає або встановлює булеве значення, яке вказує на те, чи потрібно генерувати елемент керування. При значенні false елемент керування не просто робиться невидимим для клієнта – навіть не генерується відповідний HTML-дескриптор.

DataBind()

Пов'язує елемент керування і всі дочірні елементи управління з певним джерелом даних або виразом. Прив'язка даних буде розглядатися у другій частині книги.

FindControl()

Ищет дочерний элемент управления с определенным именем в текущем элементе управления и всех содержащихся в нем элементах. Если дочерний элемент найден, метод возвращает ссылку типа Control, который затем можно привести к соответствующему типу.

HasControls()

Возвращает булевское значение, указывающее на наличие у элемента управления дочерних элементов управления. Чтобы содержать дочерние элементы, элемент управления должен быть дескриптором контейнера (например, <div>).

Render()

Записывает HTML-вывод для элемента управления на основании его текущего состояния. Этот метод не вызывается напрямую, ASP.NET вызывает его при генерации страницы.

Елементи керування HTML є спадкоємцями класу System.Web.UI.HtmlControls.HtmlControl. Вони безпосередньо відображаються у вигляді елементів розмітки HTML. Їх відображення не залежить від типу браузера. Властивості таких елементів повністю відповідають атрибутам тегів HTML.

Загалом існує близько 20 окремих класів елементів керування HTML. Вони розбиті на окремі категорії на підставі того, чи є вони елементами керування вводом (в цьому випадку вони успадковані від HtmlInputControl) або ж можуть містити інші елементи керування (у разі чого вони є похідними від HtmlContainerControl).

Серверні елементи керування HTML. Це класи, в які поміщені стандартні HTML-дескриптори і які оголошуються з атрибутом runat="server". Крім цього атрибута, оголошення для серверного елемента керування HTML залишається таким же. Наприклад, клас HtmlAnchor відповідає HTML-дескриптору <а>, а клас HtmlSelect – дескриптору <select>. Однак можете перетворити будь-який HTML-дескриптор в серверний елемент керування. Якщо йому безпосередньо не відповідає напердвизначений клас, ASP.NET просто використовує клас HtmlGenericControl. Для створення одного з цих елементів керування в Visual Studio вам знадобиться перетягнути елемент HTML з вкладки HTML панелі інструментів. Потім клацніть правою кнопкою миші на елементі та виберіть у контекстному меню команду Run As Server Control (Запустити як серверний елемент керування) для додавання атрибуту runat="server".

Порівняйте звичайний тег

<input id="Reset1" type="reset" value="reset"/>

з елементом управління HTML

<input id="Reset1" runat="server" type="reset" value="reset" />

Різниця полягає лише в наявності атрибуту runat="server". Але він дає колосальну різницю. Теги сервер відображає як є, а елементом керування можна маніпулювати у коді. Тільки у другому випадку у функції-методі сторінки можна написати

Reset1.Value = "АСП";

що рівносильно

this.Reset1.Value = "АСП";

Отже, Reset1 стає одним з членів класу сторінки.

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

Стандартні або серверні елементи керування могутніші, тому що вони прив'язані не до розмітки, а до функціональності, яку потрібно забезпечити. Багато елементів не мають аналогів в HTML, наприклад, календар. Їх вимальовування повністю контролюється ASP.NET. Перехоплюючи події PreRender, Init, Load, можна втрутитися в цей процес.

Серверні елементи керування Web. Ці класи дублюють функції базових HTML-дескрипторів, але володіють несуперечливим і значним набором властивостей і методів, які спрощують їх оголошення і доступ до них. В якості прикладів можна назвати елементи керування HyperLink, ListBox, Button. Більше того, кілька інших типів елементів керування ASP.NET (зразок повнофункціональних елементів керування та елементів керування перевіркою достовірності) часто вважаються особливими типами елементів управління Web. У Visual Studio ви знайдете базові елементи керування на вкладці Standard (Стандартні) панелі інструментів.

Повнофункціональні елементи керування. Ці вдосконалені елементи керування можуть генерувати великий обсяг HTML-розмітки і навіть клієнтський JavaScript-код для створення інтерфейсу. В якості прикладів можна назвати елементи управління Calendar, AdRotator і TreeView. У Visual Studio повнофункціональні елементи управління також можна знайти на вкладці Standard панелі інструментів.

Оголошення серверного елемента керування починаються з блоку <asp:тип> і закінчуються </asp: тип>. Наприклад:

<Asp: Label ID = "Label1" runat = "server" Text = "Hello World "> </asp: Label>

Можливо також закрити оголошення тегом />, якщо усередині блоку немає тексту:

<asp:Label ID="Label1" Runat="server" Text="Hello World"/>

Властивості цих елементів строго типізовані, на відміну від HTML-елементів.

У наступній таблиці наведені елементи керування, які мають пару серед тегів HTML. Взагалі їх набагато більше. Деякі елементи генерують не тільки HTML-код, але і JavaScript. У ASP. NET 2.0 було додано безліч нових складних елементів управління, наприклад, MultiView, TreeView, Wizard, GridView. Про можливості одного тільки GridView можна написати цілу статтю.

Таблиця відповідності деяких серверних елементів управління тегам HTML

Елемент керування
ASP .NET

Відповідний тег HTML

Призначення

<asp:Label>

<Span>

Відобразити текст

<asp:ListBox>

<Select>

Список вибору

<asp:DropDownList>

<Select>

Випадаючий список

<asp:TextBox>

<Input Type="Text"> <Input Type="Password"> <Textarea>

Рядок редагуваняя

<asp:HiddenField>

<Input Type="Hidden">

Невидиме поле

<asp:RadioButton>,

<asp:RadioButtonList>

<Input Type="Radio">

Перемикач, список перемикачів

<asp:CheckBox>,

<asp:CheckBoxList>

<Input Type="CheckBox">

Прапорець, список прапорців

<asp:Button>

<Input Type="button"> <Input Type="submit">

Командна кнопка

<asp:Image>

<img>

Зображення

<asp:ImageButton>

<input type="image">

Кнопка-зображення

<asp:Table>

<Table>

Таблиця

<asp:Panel>

<Div>

Контейнер

<asp:BulletedList>

<ul>,<ol>

Маркований список

<asp:HyperLink>

<A Href>

Гіперпосилання

Сервер не обов'язково генерує ті ж самі теги HTML для серверних елементів управління. Все залежить від типу браузера, який використовує клієнт.

Всі серверні елементи керування знаходяться в просторі імен System.Web.UI.Control і успадковуються від класу System.Web.UI.Web Controls.WebControl.

Переваги від використання таких елементів при розробці веб-застосувань:

1. Скорочується кількість коду, написаного вручну (що особливо помітно для складних елементів документа). Елемент просто "перетягується" з панелі інструментів, після чого виконується налаштування його параметрів у спеціальному вікні. При цьому всі зміни автоматично заносяться безпосередньо в *.aspx файл.

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

3. Для будь-якого елементу управління WebForm визначений набір подій, оброблюваних на веб-сервері.

4. Для будь-якого елементу управління WebForm надається можливість для перевірки вводу даних користувачем.

За промовчанням серверні елементи керування HTML в ASP.NET файлах розглядаються як текст. Для їх програмування потрібне додавання атрибуту runat = "server" у відповідний HTML елемент. Крім того, всі серверні елементи управління HTML повинні бути розміщені всередині області дії тега <form>, також має атрибут runat="server".

Подібно серверним елементам керування HTML елементи керування веб-сервера також створюються на веб-сервері і припускають додавання атрибуту runat="server". Однак вони можуть і не відповідати конкретним елементам HTML, а представляти більш складні елементи.

У всіх інтегрованих середовищах розробки є можливість додавати елементи керування за допомогою простого перетягування мишею.

Розглянемо деякі найпростіші серверні елементи керування веб.

Label. Цей елемент керування дозволяє виводити відформатований текст, аналогічно узагальненому рядковому елементу розмітки <SPAN>. Всіма властивостями цього об'єкта можна керувати з програми ASP.NET.

Більшість методів і властивостей успадковано від WebControl. Головна власна властивість – це, звичайно, його зміст – Text.

Наведені у таблиці властивості керують зовнішнім виглядом елемента і присутні в класі WebControl, тому застосовні до всіх елементів-спадкоємців WebControl, а не лише до Label.

BackColor

Колір фону

BorderColor

Колір границі елемента керування

BorderStyle

Стиль границі — суцільний, пунктир, точковий, подвійний і інші

BorderWidth

Ширина границі

Enabled

Активність. Якщо false, неможна вводити дані, не отримує фокус

Font

Шрифт, складається з несколькох атрибутів

ForeColor

Колір, яким відображається текст

Height

Висота елемента

Width

Ширина элемента

Visible

Чи видно елемент керування

TabIndex

Індекс табуляції, у порядку номерів яких у формі переміщується фокус при натисненні на клавішу Tab

ToolTip

Текст вікна підсказки

У версії 2.0 з'явилася можливість задавати для елементів керування "гарячі" клавіші, або клавіші швидкого доступу. Властивість AccessKey визначає послідовність натиснутих клавіш, які призводять до установки фокусу на даному елементі. Наприклад, AccessKey="N" означає, що для виклику функціональності треба натиснути на Alt+N. Встановити фокус в Label неможливо, тому встановлюємо властивість AssociatedControlId, яка вказує на інший елемент. Якщо це TextBox, то фокус встановлюється в нього.

Приклад опису елемента Label:

<asp: Label id="ShopNews" runat="server" Font-Size=20 ForeColor="red" BackColor="lightgray" BorderWidth=4 BorderStyle=groove Height=50 width=500>Новини торговельної площадки </asp: Label>

Префікс asp: означає, що даний елемент стандартний. Можна створювати власні контроли зі своїми префіксами.

Текст між відкриваючим та закриваючим тегами буде показаний на сторінці. Це зміст його властивості Text.

Так як Text – це такий же атрибут, як і інші, ми можемо написати інакше:

<asp: Label id="ShopNews" runat="server" Font-Size=20 ForeColor="red" BackColor="lightgray" BorderWidth=4 BorderStyle=groove Height=50 width=500 Text="Новини торговельного майданчика"/>

Вставимо цей опис в сторінку aspx і насолоджуємося ефектом. Напис червоного кольору на сірому фоні. Стиль кордону робить мітку піднесеною над фоном.

У Label, як і у всіх інших класів, є конструктор. Це означає, що створити його можна прямо в програмі, а не прописувати на формі.

namespace WebApplication

{

   public partial class WebForm1 : System.Web.UI.Page

   {

       protected void Page_Load(object sender, EventArgs e)

       {

           Label ShopNews = new Label();

           ShopNews.Text = "Третій варіант";

           ShopNews.Font.Size = 20;

           ShopNews.ForeColor = Color.Red;

           ShopNews.BackColor = Color.LightGray;

           ShopNews.BorderWidth = 4;

           ShopNews.BorderStyle = BorderStyle.Groove;

           ShopNews.Height = 50;

           ShopNews.Width = 300;

           form1.Controls.Add(ShopNews);

       }

   }

}

ASP.NET видасть браузеру код HTML, у якому перетворить мітку в елемент розмітки <span>, задавши йому стилі CSS. У формі з'явиться ще один невидимий елемент =__VIEWSTATE, який ми скоро обговоримо.

TextBox. Він замінює елементи розмітки <textbox> і <textarea>, які обидва вводять текст, тільки <textbox> – однорядковий, а <textarea> – багаторядковий. Відповідно, якщо властивість textmode дорівнює MultiLine, вийде багаторядкове поле введення, а якщо дорівнює SingleLine – однорядкове. Якщо textmode дорівнює Password, введені дані замінюються зірочками, як при <Input Type="Password">. Природньо, це потрібно в основному для введення пароля.

Властивість rows задається при textmode, встановленому у MultiLine, і задає кількість рядків для введення. Аналогічно функціонує властивість columns – кількість символів у рядку.

Якщо властивість Wrap встановлено, то текст переходить на нову сходинку, щоб повністю поміщатися у вікні. Ця можливість повинна бути добре відома по текстовим редакторам:

namespace WebApplication

{

   public partial class WebForm1 : System.Web.UI.Page

   {

       protected void Page_Load(object sender, EventArgs e)

       {

           if (txtName.Text != "")

               Label1.Text = "Ви ввели ім'я:" + txtName.Text;

           if (txtAddress.Text != "")

               Label1.Text = "Ви ввели адресу:" +

             txtAddress.Text;

           if (txtPassword.Text != "")

               Label1.Text = "Ви ввели:" +

                 txtPassword.Text + "<br>Спасибі за регистрацію!";

       }

   }

}

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

   <title></title>

</head>

<body>

   <form id="form1" runat="server">

   <div>

           <asp:Label ID="lblName" runat="server" Text="Введіть ім'я:&nbsp;"></asp:Label>

&nbsp;<asp:TextBox ID="txtName" runat="server" style="margin-bottom: 0px"></asp:TextBox>

           <br />

           <asp:Label ID="lblAddress" runat="server" Text="Введіть адресу:"></asp:Label>

           <asp:TextBox ID="txtAddress" runat="server" TextMode="multiline" Rows="5" Wrap="true"></asp:TextBox>

           <br />

           <asp:Label ID="lblPassword" runat="server" Text="Введіть пароль:"></asp:Label>

&nbsp;<asp:TextBox ID="txtPassword" runat="server" TextMode="password"></asp:TextBox>

                   <br />

           <asp:Label ID="Label1" runat="server" Text="Результат: "></asp:Label>

          <input type="Submit"><br />

                   </div>

    </form>

</body>

</html>

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

У всіх класів, успадкованих від WebControl, в ASP. NET 2.0 з'явився метод Focus(). Він встановлює фокус на елемент керування. Найчастіше застосовується саме до TextBox. Додайте txtName.Focus() в подія Page_Load(), і курсор при завантаженні сторінки вже буде встановлений в потрібному рядку введення.

RadioButton. Перемикачі не ходять поодинці. Один перемикач на сторінці не має сенсу. Потрібні хоча б два. Типовий набір перемикачів визначається так:

<asp: RadioButton ID="RadioButton1" Runat="server" Text="Yes" GroupName="Set1" />

<asp: RadioButton ID="RadioButton2" Runat="server" Text="No" GroupName="Set1" />

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

У RadioButton є подія CheckedChanged, яка викликається, коли користувач вибирає один з перемикачів групи. Щоб обробник цієї події викликався, необхідно встановити властивість AutoPostBack:

      protected void option1_CheckedChanged(object sender, EventArgs e)

       {

           if (option1.Checked)

               Message.Text = "Ви проголосували за " + option1.Text;

           if (option2.Checked)

               Message.Text = "Ви проголосували за " + option2.Text;

           if (option3.Checked)

               Message.Text = "Ви проголосували за " + option3.Text;

       }

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

   <title></title>

</head>

<body>

   <form runat="server" id="voting">

   <div>

&nbsp;За кого ви проголосували вчора на виборах?<br />

           <br />

           <asp:RadioButton id="option1" runat="server" Text="партію Регіони" OnCheckedChanged="option1_CheckedChanged" AutoPostBack = true GroupName="Choice" /><br />

           <asp:RadioButton id="option2" runat="server" Text="боксера" OnCheckedChanged="option1_CheckedChanged" AutoPostBack = true GroupName="Choice" /> <br />

           <asp:RadioButton id="option3" runat="server" Text="проти всіх" OnCheckedChanged="option1_CheckedChanged" AutoPostBack = true GroupName="Choice"/><br />

<br /><br />

</form>

<asp:Label id="Message" runat="server" />

</body>

</html>


Способи вбудовування коду ASP.NET у сторінку. Є три способи вбудувати код на програмній мові у сторінку aspx.

Блок <script runat="server"> </ script> називається блоком оголошення коду. Тег <script> схожий на той, яким запроваджуються скрипти JavaScript, але з великим відмінністю - скрипт виконується на сервері. Тому необхідно задавати атрибут runat = "server". Атрибут language у нього може приймати значення С#, VB, J#. У сторінках з відокремленим кодом можна писати і на C + +. За замовчуванням приймається значення мови Visual Basic, тому не треба забувати вказувати мову, коли пишете на С #. Але немає необхідності це робити, якщо мова визначений в директиві Page. Можна писати на різних мовах в одному додатку, але не можна змішувати різні мови на одній сторінці.

Усередині блоку можна оголошувати змінні, константи і функції. Насправді в C # немає глобальних змінних, так що це будуть члени класу сторінки. Але вони виглядають глобальними, тому що клас не описаний програмістом, його генерує ASP. NET. Тому будемо називати їх змінними сторінки.

Тут можна перевизначити віртуальні методи класу сторінки. У блоці також можна оголошувати класи, але вони будуть внутрішніми по відношенню до класу сторінки.

Блоки відображення. Будь код, впроваджений за допомогою <% і%>, обробляється під час події Render як частина сторінки. У тілі блоку <%%> допустимо оголошувати змінні (тоді вони будуть локальними для того методу, в якому даний блок буде реалізований), але не можна оголошувати методи або типи.

Такий стиль програмування був характерний для asp. Найчастіше в блоках відображення виводиться HTML-код за допомогою Response.Write.

<% = SomeExpr%> є скороченням <% Response.Write (someExpr)%>:

<html>

<head>

</ Head>

<body>

1 Рядок HTML <br />

<% Response.Write ("1 Рядок ASP.NET <br />");%>

2 Рядок HTML <br />

<% Response.Write ("2 Рядок ASP.NET <br />");%>

3 Рядок HTML <br />

<% = "3 Рядок ASP.NET <br />";%>

</ Body>

</ Html>

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

Об'єкт будь-якого класу створюється за допомогою синтаксису "тег об'єкта":

<Object id = "items" class = "System.Collections.ArrayList"

runat = "server" />

Це еквівалентно опису в класі сторінки поля:

System.Collections.ArrayList items;

Ще один спосіб застосовується для зв'язування з джерелами даних і буде розглянуто в лекції 7.


Лекція №9

Основною метою технології ASP.NET є створення моделі, яка дозволяє web-розробникам швидко створювати web-форми, таким же способом, як Windows-розробники можуть створювати графічний інтерфейс (вікна) для настільних застосувань. Але web-застосування відрізняються від традиційних повнофункціональних клієнтських застосувань.

Основні відмінності web и windows застосувань:

Web програми виконуються на іншому комп'ютері (сервері). Наприклад, створюється форма, яка дозволяє користувачам вибирати товар та змінити його опис. Користувач може виконати це у вікні браузера, але для виконання необхідних операцій (таких як оновлення БД), код застосування повинен виконуватися на web-сервері.

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

Життєвий цикл Веб-сторінок ASP.NET

При виконанні сторінки ASP.NET здійснюється її життєвий цикл, під час якого виконуються такі кроки обробки: ініціалізація, визначення елементів керування, відновлення і підтримання робочого стану, виконання коду обробника подій, а також промальовка (отрисовка). Знання життєвого циклу сторінки необхідно, щоб мати можливість записувати код у потрібний крок життєвого циклу з потрібним результатом. Крім цього, при створенні власних елементів керування необхідно ознайомитися з життєвим циклом сторінки, щоб гарантувати правильну ініціалізацію елементів керування, збір властивостей елементів керування та поточних даних стану, а також запуску будь-якого керуючого коду.

Примітка: Далі будуть використовуватися такі терміни, як стан перегляду (або стан виду ViewState), сесія (Session) та інші. Їх пояснення буде дано пізніше, у розділі "Управління станом в ASP.NET"

Загальні етапи життєвого циклу сторінки. В цілому сторінка проходить через етапи, описані в табл. Крім етапів життєвого циклу сторінки існують етапи застосування, які виконуються до і перед запитом, але не є обов'язковими для сторінки.

Этап

Описание

Запит сторінки

Запит сторінки відбувається перед початком її життєвого циклу. При запиті сторінки користувачем ASP.NET визначає, чи потрібно обробляти і компілювати сторінку (до початку життєвого циклу сторінки), або відправити у відповідь на запит кешовану версію сторінки, не запускаючи її обробку.

Запуск

На початковому етапі встановлюються властивості сторінки, наприклад, Request і Response. На цьому етапі сторінка також визначає, чи є запит зворотньою передачею або новим запитом, і встановлює властивість IsPostBack. Крім цього, на цьому етапі встановлюється властивість сторінки UICulture.

Ініціалізація сторінки

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

Завантаження

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

Перевірка

Під час перевірки викликається метод Validate всіх перевіряючих елементів керування, який встановлює властивість IsValid окремих перевіряючих елементів керування тасторінки.

Обробка подій зворотнього запиту

Якщо запит є зворотнім, викликається будь-який з обробників подій.

Вимальовування (промальовка)

Перед промальовкою проводиться збереження стану перегляду сторінки і всіх елементів керування. На етапі промальовки сторінка викликає метод Render для кожного елемента керування, надаючи модуль запису тексту, який записує отримані дані в OutputStream властивості сторінки Response..

Вивантаження

Вивантаження викликається після завершення відтворення сторінки, відправки клієнтові і готовності до видалення. На даному етапі властивості сторінки, наприклад, Response і Request, вивантажуються, проводиться очищення.

Події життєвого циклу. На кожному етапі життєвого циклу сторінки вона викликає події, які можуть бути використані для керування виконанням власного коду. У разі елементів керування обробник подій прив'язується до події за допомогою атрибутів типу onclick, або у коді.

Сторінки також підтримують автоматичну обробку: ASP.NET робить пошук методів з відповідними іменами і автоматично виконує ці методи при виникненні певних подій. Якщо атрибут AutoEventWireup у директиві @Page встановлений у значення true (або не встановлений, оскільки він має значення true за промовванням), події сторінки автоматично прив'язуються до методів, які використовують правила іменування Page_event, наприклад, Page_Load і Page_Init.

У таблиці наведено події життєвого циклу сторінки, які використовуються найчастіше. Можуть існувати й інші події, але вони майже не використовуються у сценаріях обробки сторінок. Замість цього вони у більшості випадків використовуються серверними елементами керування на сторінці ASP.NET для своєї ініціалізації і відображення.

Событие страницы

Типичные случаи использования

PreInit

Подія використовується:

  1. за допомогою властивості IsPostBack потрібно перевірити, чи обробляється сторінка вперше.
  2. створення або повторне створення динамічних елементів керування.

Init

Виникає після ініціалізації всіх елементів керування і застосування параметрів обкладинки. Ця подія використовується для читання або ініціалізації властивостей елемента керування.

InitComplete

Вызывается объектом Page. Это событие используется для обработки заданий, требующих завершения всех инициализаций.

PreLoad

Это событие используется при необходимости обработки страницы или элемента управления до наступления события Load. После вызова события при помощи Page оно загружает состояние просмотра для себя и всех элементов управления, затем обрабатывает все данные из обратных запросов, включенных в экземпляр Request.

Load

Page вызывает метод события OnLoad в Page, затем рекурсивно выполняет это действие для каждого дочернего элемента управления, до выполнения загрузки страницы и всех элементов управления. Метод события OnLoad используется для установки свойств элементов управления и создания подключения к базе данных.

События элементов управления

Эти события используются для обработки определенными событиями в элементах управления, например Button события элемента управления Click или TextBox события TextChanged.

LoadComplete

Это событие используется для обработки заданий, требующих полной загрузки всех других элементов управления страницы.

PreRender

До события:

  1. Объект Page вызывает EnsureChildControls для каждого элемента управления и для страницы.
  2. Каждый связанный элемент управления, свойство которого DataSourceID установлено, вызывает свой метод DataBind. Событие PreRender происходит для каждого элемента управления на странице. Это событие используется для внесения окончательных изменений на странице или в ее элементах управления.

SaveStateComplete

До этого события ViewState сохраняется для страницы и всех элементов управления. Все изменения на странице или в ее элементах управления на данном этапе будут проигнорированы. Эти задачи используются для сохранения состояния просмотра без внесения изменений в элементы управления.

Render

Это не событие; вместо этого на данном этапе обработки объект Page вызывает этот метод для каждого элемента управления. Все серверные Веб-элементы управления ASP.NET обладают методом Render, который записывает разметку элемента управления, отправляемую клиенту. Обычно во время создания пользовательских элементов управления при выводе разметки элемента управления этот метод переопределяется. Однако если пользовательский элемент управления содержит только стандартные серверные элементы управления ASP.NET и не содержат пользовательской разметки, переопределять метод Render не требуется. Пользовательский элемент управления (файл с расширением ASCX) содержит отрисовку по умолчанию, таким образом, нет необходимости отрисовывать элемент управления явным образом.

Unload

Это событие происходит для всех элементов управления и затем для страницы. При работе с элементами управления это событие используется для выполнения окончательной очистки определенных элементов управления, например, для закрытия подключений отдельных элементов управления к базам данных. Относительно страницы это событие используется для выполнения окончательных действий, например, для закрытия открытых файлов и подключений к базам данных, а также закрытия пользовательских сеансов или других задач, связанных с запросами.


 

А также другие работы, которые могут Вас заинтересовать

70223. Основні терміни метрології та їх визначення 311 KB
  Фізичні величини та одиниці вимірювань Об’єкти довкілля це фізичні тіла та їх системи. Вибір основних величин і розмірів їх одиниць під час побудови системи одиниць теоретично довільний але він продиктований певними вимогами практики а саме: кількість основних величин має бути невеликою...
70224. Методологические и правовые основы безопасности жизнедеятельности 332.5 KB
  Студент должен знать: ПК50 основы безопасности общества и личности; порядок взаимодействия медицинских формирований и учреждений при ликвидации последствий в очагах поражения ПК12 особенности организации оказания медицинской помощи проведения реанимационных мероприятий в чрезвычайных...
70225. ЗАЩИТА ЧЕЛОВЕКА ОТ ВРЕДНЫХ И ОПАСНЫХ ФАКТОРОВ ПРИРОДНОГО И ТЕХНОГЕННОГО ПРОИСХОЖДЕНИЯ 887.5 KB
  Цель занятия: овладеть следующими компетенциями в пределах дисциплины БЖД и Медицина катастроф ПК12 способность и готовность использовать методы оценки природных и медико-социальных факторов среды в развитии болезней у взрослого населения и подростков проводить их коррекцию осуществлять...
70226. Безопасность жизнедеятельности в медицинских организациях 364 KB
  Система здравоохранения сегодня - это более трех миллионов работающих, тысячи медицинских организаций (лечебно-профилактических, аптечных, санитарно-эпидемиологических учреждений) десятки научно-исследовательских институтов, центров, высших и средних учебных заведений...
70227. Национальная безопасность 307 KB
  Национальная безопасность - основы государственного устройства и управления, осуществляющие процесс переоценки национальных ценностей и согласования интересов личности, общества и государства, дальнейшее развития социально-экономических, политических, правовых, этнических связей и отношений.
70228. Расстройства восприятия, иллюзии, галлюцинации. Дереализация и деперсонализация 95 KB
  Показанием к срочной даже без согласия больного госпитализации являются: C 12. Психосенсорные расстройства обычно являются проявлением: D 14. В каком случае иллюзии являются безусловным признаком психоза C Галлюцинации относятся к расстройствам невротического уровня.
70230. Визвольні ідеї Г.Сковороди, Т.Шевченка, І.Франка 132 KB
  Національна природа інтелігента визначається не кількістю його декларацій про любов до Батьківщини а відповідністю власної духовної діяльності специфіці менталітету рідного народу і потребам його розвитку спричинених своєрідністю конкретної історичної ситуації.
70231. Соціально-політичні погляди М.Грушевського 49.5 KB
  Політична думка в Україні у XIX—XX ст. формувалася в умовах, коли зникав традиційний сільськогосподарський уклад життя і його змінювало індустріальне суспільство, коли відбувалися процеси національно-культурного й національно-політичного відродження України.