Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Вступ 3
1. Огляд технології ASP .NET 5
1.1 Застосування ASP .Net 5
1.2 Приклад проекту 6
1.3 Простори імен бібліотеки класів 9
1.4 Програма перегляду класів 9
1.5 Перевірка відповідності стандартам 10
1.6 Властивості сторінки 11
1.7 Події сторінки 13
1.8 Способи впровадження коду ASP. NET в сторінку 14
1.9 Блоки відображення 15
2. Створення веб порталу 17
2.1 Аутентифікація і авторизація 17
2.2 Елементи управління групи Login 20
2.4 Персоналізація 21
2.5 Створення бази даних користувачів 22
2.6 LINQ to SQL 23
Висновки 26
Список літератури: 27
Для створення веб-сторінок розглянуто технологію ASP .NET . Показано принципи створення динамічних сторінок. Використовуючи мови .NET Framework можна створювати серверну частину сайту. Наведено приклад створення проекту на ASP .NET. Розглянуто спосіб створення та використання авторизації та аутентивфікації на сайті. Вказані способи використання технології LINQ to SQL для роботи з базою даних.
З появою веб-технологій комп'ютер починають використовувати абсолютно нові верстви населення Землі. Можна виділити дві найбільш характерні групи, що знаходяться на різних соціальних полюсах, які були стрімко залучені в нову технологію, можливо, навіть крім їх власного бажання. З одного боку, це були представники елітарних груп суспільства - керівники крупних організацій, президенти банків, топ-менеджери, впливові державні чиновники і так далі. З іншого боку, це були представники найширших верств населення - домогосподарки, пенсіонери, діти.
При появі технології веб, комп'ютери обернулися лицем до цих двох абсолютно протилежним категорій потенційних користувачів. Еліту об'єднувала одна межа через високу відповідальність і практично стовідсотковій зайнятості “великі люди” ніколи не користувалися комп'ютером; типовою була ситуація, коли з комп'ютером працював секретар. У якийсь момент часу вони зрозуміли, що комп'ютер їм може бути корисний, що вони можуть результативно використовувати той невеликий час, який можна виділити на роботу за комп'ютером. Вони раптом зрозуміли, що комп'ютер - це не просто модна і дорога іграшка, але інструмент отримання актуальної інформації для бізнесу. При цьому їм не потрібно було витрачати багато часу, щоб освоїти технологію роботи з комп'ютером (в порівнянні з тим, як це було раніше).
Спектр соціальних груп, що підключаються до мережі Інтернет і що шукають інформацію в WWW, весь час розширюється за рахунок користувачів, що не відносяться до категорії фахівців в області інформаційних технологій. Це лікарі, будівельники, історики, юристи, фінансисти, спортсмени, мандрівники, священослужителі, артисти, письменники, художники. Список можна продовжувати бескінченно. Будь-який, хто відчув корисність і незамінність мережі для своєї професійної діяльності або захоплень, приєднується до величезної армії споживачів інформації в «Всесвітній Павутині».
Веб-технологія повністю перевернула наші уявлення про роботу з інформацією, та і з комп'ютером взагалі. Виявилось, що традиційні параметри розвитку обчислювальної техніки - продуктивність, пропускна спроможність, ємкість пристроїв, що запам'ятовують, не враховували головного «вузького місця» системи - інтерфейсу з людиною. Застарілий механізм взаємодії людини з інформаційною системою стримував впровадження нових технологій і зменшував вигоду від їх застосування. І лише коли інтерфейс між людиною і комп'ютером був спрощений до природності сприйняття звичайною людиною, послідував безпрецедентний вибух інтересу до можливостей обчислювальної техніки.
З розвитком технологій гіпертекстової розмітки в Інтернеті почали з'являтися все більше сайтів, тематика яких була абсолютно різною від сайтів крупних компаній, що оповідають про успіхи компанії і її провали, до сайтів маленьких фірм, що пропонують відвідати їх офіси в межах одного міста.
Розвиток Інтернет-технологій послужив поштовхом до появи нової вітки в Інтернеті Інтернет-форумів. Почали з'являтися сайти, і навіть цілі портали, на яких люди зі всіх куточків планети можуть спілкуватися, отримувати відповіді на будь-які питання і, навіть, укладати ділові операції.
Також в наш час стає поширеним організація і пошук цікавих і потрібних користувачу подій. Тому було вирішено створити інтернет портал для того щоб користувач міг знайти ті події і провести свій час саме так як це йому найбільше імпоную. Основним нашим завдання є те, щоб користувач не переглядав багато не потрібної йому. На сайті кожен користувач зможе відсортувати події по категоріях: «Культура і Мистецтво», «Наука», «Спорт», «Бізнес», «Розваги», «Кіно». Після реєстрації і заповнення анкети, в якій він вкаже свої інтереси, йому буде надходити інформація про те що і де планується таке, що зацікавить його. Так це набагато спростить пошуки потрібної події, де провести свій вільний час чи знайти компаньйона для бізнесу. Організатори подій матимуть можливість добавляти подію за допомогою запропонованої форми на сайті. Форма заповняється користувачем у якого є права адміністратора.
Microsoft . NET Framework - це платформа для створення, розгортання і запуску web-сервісів і додатків. Вона надає високопродуктивне, засноване на стандартах багатомовне середовище, яке дозволяє інтегрувати існуючі програми з додатками і сервісами наступного покоління, а також вирішувати завдання розгортання і використання інтернет-додатків. .NET Framework складається з трьох основних частин - загальномовного середовища виконання (common language runtime), ієрархічної безлічі уніфікованих бібліотек класів і компонентної версії ASP, званої ASP .NET.
ASP .NET - це частина технології .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-сторінка повинна бути створена "на льоту" програмою, що виконується на інтернет-сервері. Широко застосовується механізм шлюзів CGI (Common Gateway Interface). Спочатку користувач отримує статичну сторінку з формою. Відомо, що в тегу FORM існує атрибут ACTION. Саме він задає адресу (URL) виконуваного додатку. На сервері знаходяться виконувані файли програм, написаних, наприклад, на C / С + + або Delphi, які по протоколу HTTP приймають дані з вхідного потоку або з змінних оточення і записують у стандартний вихідний потік готову сторінку.
На початку виріште, в якій директорії будете створювати сторінки. Всі файли, що знаходяться в одній директорії, вважаються єдиним проектом. Запустіть обране вами середовище розробки. Виберіть пункт меню File-New-Website. З'явиться діалогове вікно. Призначте в ньому ім'я проекту і виберіть мову програмування С#. За замовчуванням проект створюється у файловій системі. За бажанням його можна створити на HTTP або FTP-сервер. З файлової системи проект завжди можна скопіювати на сервер натисненням однієї кнопки в заголовку Solution Explorer.
У проекті буде створена сторінка default.aspx. Виберіть її, і з'явиться вікно редагування із закладками Design і Source. Не змінюючи нічого, клацніть на кнопці зі стрілкою, щоб переглянути сторінку в браузері. З'явиться вікно, в якому запитується, чи потрібно додати файл web.config можливість налагодження. Натисніть "OK". На панелі завдань повинен з'явитися значок web-сервера. Відкриється браузер, який показує сторінку за адресою http://localhost:номер_порта/Website1/default.aspx. "Localhost" позначає сервер, що працює на вашому комп'ютері. Вбудований сервер Cassini сам призначає собі номер порту - для кожного проекту він різний. Сервер IIS зазвичай працює через порт 80 (або 8080, якщо той зайнятий), і для нього номер порту вказувати не потрібно. При цьому ваша сторінка буде скомпільована.
Поки що сторінка в браузері порожня.
Але вихідний код цієї сторінки не порожній. Програма згенерувала код сама.
<%@ Page Language="C#" AutoEventWireup="true";
CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!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>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
</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" (інших значень не буває). При використанні цієї властивості елемент управління обробляється компілятором, а не передається браузеру "як є".
Вставте в Default.aspx між тегами <form> і </form> тег, що задає елемент керування.
<Asp: Label id = "Time" runat = "server"
Text = "Сервер знаходиться у Львові. Місцевий час:"
/>
Серверний елемент управління Label є засобом розміщення на сторінці тексту, який може містити теги HTML. Змінюючи значення властивостей цього елемента управління в коді, ви можете динамічно змінювати текст на сторінці. У asp:Label компілятору повідомляється, з яким об'єктом ведеться робота (у даному випадку - з елементом управління Label).
Далі задаються різні властивості елемента управління. У першу чергу визначається його ім'я id = "time" і атрибут "runat", а також текст.
У файлі Default.aspx.cs повинен міститися такий текст:
using System;
......
public partial class _Default: System.Web.UI.Page
{
protected void Page_Load (object sender, EventArgs e)
{
}
}
Ключове слово partial з'явилося в C# 2.0, і дозволяє розбити текст визначення класу між різними файлами.
System.Web.UI.Page - клас, базовий для всіх сторінок ASP. NET.
Якщо використовується середовище WebMatrix, вставте його самостійно між тегами <script> і </script> файлу default.aspx.
Вставте в цю функцію рядок
Time.Text + = DateTime.Now.ToString ();
Тут ми використовуємо цей клас, як у будь-якій програмі на C#. Отже, будь-який клас .NET доступний і в локальних, і в розподілених додатках.
Отримане значення присвоюється властивості Text об'єкта time. Це елемент керування типу Label (мітка), який ми вставили. Час на годиннику клієнта і сервера може не збігатися, якщо вони знаходяться в різних точках земної кулі.
Page_Load схожий на звичайний обробник події форми. Як можна легко здогадатися, ця функція викликається кожного разу, коли завантажується форма.
Бібліотека класів FCL містить тисячі класів. Для зручності використання вони об'єднані в простори імен. Щоб звертатися до класів, оголошених в просторі імен, без вказівки повного шляху, його потрібно імпортувати в проект. Якщо ви хочете працювати з файлами формату XML, потрібно імпортувати простір імен System.XML. У сторінках відокремленого коду на C#, як завжди, використовується директива using.
using System.XML;
На сторінці aspx - директива Import
<%@ Import Namespace= "System.XML " %>
Для кожного простору імен потрібна окрема директива Import.
Visual Studio .NET і VWD за замовчуванням включають в сторінку на C# найбільш часто використовувані простору імен. На сторінку aspx імпортувати ці простори імен не потрібно.
Наприклад, в просторі імен System.Web.UI знаходиться клас Page, без якого не може існувати жодна сторінка ASP .NET, в System.Web - HttpRequest і HttpResponse.
Як же дізнатися, які класи є в бібліотеці класів .NET? Для цього призначений Object Browser (Visual Studio 2005) і Class Browser WebMatrix. Щоб відкрити Object Browser в Visual Studio 2005 або VWD Express, виберіть пункт меню View -> Object Browser. Якщо ви використовуєте WebMatrix, то Class Browser знаходиться в тій же папці меню Windows, що і WebMatrix - All Programs -> ASP.NET WebMatrix. У форматі ASP. NET Class Browser включений до складу Framework SDK.
Усі наявні простори імен показані як вузли дерева. Нас цікавить System.Web. Розкрийте цей вузол. Усередині розміщені інші простори імен. Розкрийте System.Web.UI. Там знаходиться велика кількість класів, інтерфейсів, делегатів, перерахувань.
Виберіть клас Page. У віконці справа з'явиться список його методів, полів і подій. Якщо вибрати метод, в третьому вікні під іншим з'явиться його опис. Усередині класу знаходяться ще дві папки - класів-прабатьків (Base Classes) і класів-нащадків. Всіх їх теж можна переглянути. Object Browser показує і класи поточного проекту. Якщо класи закоментовані тегами генерації документації XML, то цю інформацію теж видно, наприклад Summary, Parameters, Values, Returns.
Існують різні стандарти HTML і xHTML. Більш пізні стандарти пред'являють більш суворі вимоги, наприклад, хHTML 1.1 не дозволяє користуватися <br> та іншими простими тегами без закриваючої косої риски <br/>. У той же час старі стандарти не підтримують нові теги.
У заголовку HTTP-запиту вказується стандарт документа, Visual Studio 2005 у всіх сторінках вказує такий стандарт:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Цей стандарт вимагає наявності атрибуту xmlns в тезі <html> -посилання на сайт з описом стандарту.
<html xmlns="http://www.w3.org/1999/xhtml">
Багато сторінок, зроблені для попередніх версій ASP .NET, не мають такого атрибуту. У панелі інструментів Html Source Editing також знаходиться список, що випадає, де можна вибрати стандарт або версію браузера, для якого призначена ця сторінка. Сторінка автоматично перевіряється на відповідність цьому стандарту.
Сторінка - це основа всього в web-додатку.
Клас System.Web.UI.Page інкапсулює функціональність, необхідну для створення й обробки сторінок ASP .NET.
Кожна сторінка ASP .NET - це об'єкт класу, який автоматично генерується ядром ASP .NET. Клас успадковується від асоційованого з сторінкою класу, якщо ми використовуємо відокремлений код, або він прямо успадковується від System.Web.UI.Page, якщо код на C # вбудований в сторінку. Середовище також створює конструктор за умовчанням.
До поточного об'єкту сторінки можна звертатися як до змінної Page. Page - це контейнер елементів управління цієї сторінки, тому містить в собі колекцію Controls. Якщо в тезі <head> присутній атрибут runat = "server", то в Page міститься і поле Header, через яке можна керувати заголовком сторінки - наприклад, змінити назву сторінки в заголовку браузера, призначити файл каскадних таблиць стилів:
<script runat="server">
protected void Page_Init(object sender, EventArgs e)
{
HtmlLink myHtmlLink = new HtmlLink();
myHtmlLink.Href = "printable.css";
myHtmlLink.Attributes.Add("rel", "stylesheet");
myHtmlLink.Attributes.Add("type", "text/css");
Page.Header.Controls.AddParsedSubObject(myHtmlLink);
Page.Header.Title = "Новий заголовок";
}
protected void Page_Load(object sender, System.EventArgs e)
{
Style bodyStyle = new Style();
bodyStyle.ForeColor = System.Drawing.Color.Blue;
bodyStyle.BackColor = System.Drawing.Color.Beige;
Page.Header.StyleSheet.CreateStyleRule(bodyStyle, null,
"p");
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Hello ASP.NET</title>
</head>
<body>
<p>Програмуйте на ASP.NET</p>
</body>
</html>
У цьому прикладі ми поміняли текст заголовка. Запустимо цю сторінку. В отриманому HTML-коді всередині тега <title> Стоїть вже не "Hello ASP.NET", а "Новий заголовок ", який був встановлений через Page.Header.Title. Був створений стиль для тега <p>, що відобразилось таким чином:
<style type="text/css">
p { color:Blue;background-color:Beige; }
</style>
Зовнішня сторінка CSS була імпортована з файлу:
<link href="printable.css" rel="stylesheet" type="text/css" />
<style type="text/css">
Якщо атрибут AutoEventWireup, який присутній в заголовку сторінок, генерованих VS, встановлений, то методи з префіксом Page_ автоматично призначаються обробники подій сторінки.
У сторінки є дві важливі властивості - Response і Request. Властивість Response має тип HttpResponse. Response сторінки можна сприймати як вихідний потік. Весь HTML-код згенерованої сторінки в принципі може бути виведений через запис в цей потік. Це був звичайний спосіб роботи розробників asp. Але в ASP .NET є більш зручні засоби виведення даних за допомогою серверних елементів керування. Response краще використовувати для запису Cookies, для завдання різних параметрів заголовка - керувати кешуванням, властивістю Expires.
Ось приклад з MSDN:
HttpCookie MyCookie = new HttpCookie("LastVisit");
DateTime now = DateTime.Now;
MyCookie.Value = now.ToString();
MyCookie.Expires = now.AddHours(1);
Response.Cookies.Add(MyCookie);
Функція Response.Redirect перенаправляє браузер на іншу сторінку:
Response.Redirect("NavigationTarget.aspx?name=" +
System.Web.HttpUtility.UrlEncode(Name.Text));
Тут формується командний рядок з параметрами QueryString, які цільова сторінка може прочитати.
Аналогічно, властивість Request - це запит, переданий на сервер для виведення потрібної сторінки. Він має тип HttpRequest. У ньому зберігається все про клієнта,включаючи налаштування його браузера, файли-cookie і дані, введені у форму:
NameLabel.Text = Server.HtmlEncode(Request.QueryString["Name"]);
Робота середовища ASP. NET з сторінкою починається з отримання та обробки web-сервером IIS-запиту до даної сторінки і передачі цього запиту середовищу виконання ASP .NET. Середовище виконання аналізує, чи потрібно компілювати сторінку або можна видати як відповідь сторінку з кешу. Потім починається життєвий цикл сторінки. Він починається з етапу PreInit. Після отримання запиту середовище виконання завантажує клас викликаної сторінки, встановлює властивості класу сторінки, вибудовує дерево елементів, заповнює властивості Request, Response і UICulture і викликає метод IHttpHandler.ProcessRequest. Після цього середовище виконання перевіряє, яким чином була викликана ця сторінка, і якщо сторінка викликана шляхом передачі даних з іншої сторінки, про що буде розказано далі, то середовище виконання встановлює властивість PreviousPage. На цьому етапі встановлюється також властивість IsPostback об'єкта Page, яка дозволяє дізнатися, чи в перший раз завантажується форма або вона повинна формуватися як результат обробки даних, введених користувачем. У обробниках подій сторінки можна перевірити це властивість:
if (! Page.IsPostBack)
{
/ / Обробляти
}
Далі відбувається ініціалізація сторінки - подія Init. Під час ініціалізації створюються дочірні користувацькі елементи керування і їм встановлюються властивості id. У цей же час до сторінки застосовуються теми оформлення. Якщо сторінка викликана в результаті постбека, то на цьому етапі дані, відправлені на сервер, ще не завантажені у властивості елементів управління. Програміст може ініціалізувати їх властивості. Завантаження. Під час події Load встановлюються властивості елементів управління на підставі інформації про стан, якщо сторінка створюється в результаті надсилання даних форми. Якщо на сторінці існують валідатори (класи перевірки даних, див. лекцію 5), то для них викликається метод Validate(). Потім викликаються обробники подій (за умови, що сторінка генерується у відповідь на дії користувача).
У методі Render генерується сам HTML-код виведеної сторінки. При цьому сторінка викликає відповідні методи дочірніх елементів, а ті в свою чергу - методи своїх дочірніх елементів. У методі Render код виводиться в Response.OutputStream. Сама сторінка теж вважається елементом управління - клас Page є нащадком класу Control. Якщо на сторінці є блоки відображення, вони стають частиною функції відтворення (rendering). Нарешті, сторінка вивантажується з пам'яті сервера і відбувається подія Unload.
Під час життєвого циклу сторінки відбуваються різні події. Можна включити трасування сторінки, щоб подивитися порядок їх виникнення:
<%@ Page Language="C#" Trace ="true" TraceMode="SortByTime" %>
Під час трасування не виводиться подія Unload, тому що воно відбувається, коли весь код вже виведено. Під час обробки цієї події потрібно звільнити ресурси, наприклад, з'єднання з базами даних або відкриті файли.
Повний список подій сторінки, які можна визначити у класі сторінки:
Для всіх подій визначені обробники - віртуальні функції OnInit, OnLoad. Коли AutoEventWireup рівне true, в класі автоматично оголошуються функції-обробники подій з префіксом Page - Page_Load, Page_Init і так далі. Одна з найпопулярніших подій - це Page_Load. Генеруючи нову сторінку, Visual Studio створює обробник цієї події. Тут можна змінити зовнішній вигляд елементів і задати нові. Можна встановити AutoEventWireup в false. У такому випадку треба писати перевантажені версії віртуальних функцій:
protected override void OnInit(EventArgs e)
{
}
Так можна добитися прискорення роботи сторінки.
Є три способи впровадити код на програмному мовою в сторінку 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;
Важлива частина багатьох web-додатків - можливість контролювати доступ до ресурсів. Безпека проекту обертається навколо двох концепцій - аутентифікації та авторизації. Аутентифікація - процес визначення особи користувача. Авторизація - процес визначення прав користувача на доступ до певних ресурсів, на перегляд деяких розділів, на можливість редагування інформації і так далі.
Для авторизації користувач вводить для користувача ім'я, під яким зареєстрований , і пароль. Після цього, програма визначає можливість доступу до ресурсів, а також може видозмінювати як зовнішній вигляд за допомогою тем, так і зміст генеруються. Наприклад, у форумі записи можуть показуватися у вигляді дерева або лінійно.
У ASP. NET аутентифікацією керують за допомогою служби Membership, яка дозволяє визначити різні види членства на сайті. Інформацію про членів можна зберігати в різних місцях - в базах даних, текстових файлах або навіть в облікових записах Windows. Конфігурувати членство можна індивідуально для кожного користувача або на основі ролей за допомогою сервісу Role Manager. Ролі полегшують конфігурування, так як можна створювати ролі і потім додавати користувачів до готових ролям. Будь-якому користувачеві може належати будь-яку кількість ролей.
За замовчуванням служби використовують провайдера AspNetSqlProvider. У такому випадку ASP. NET автоматично створює базу даних ASPNETDB.MDF в директорії проекту App_Data, коли запускається команда ASP.NET Configuration - або програмно, або за допомогою елементів управління групи Login задіюються служби Membership або Role Manager. Служба Membership також забезпечена провайдером, що працюють з Active Directory. Role Manager може працювати з провайдером, пов'язаним з Authorization Manager операційної системи Widnows. API, пов'язане зі службою, дозволяє настроїти її і на використання користувацького провайдера.
Ролі мають певні права. Наприклад, адміністратор сайту може змінювати налаштування, редагувати членство інших користувачів. Звичайний користувач з роллю Friend може переглянути приватні альбоми адміністратора, а неавторизований користувач - тільки публічні. Ця модель реалізована у додатку Starter Kit. У цьому додатку ролі створюються під час першого запуску:
void Application_Start(object sender, EventArgs e) {
SiteMap.SiteMapResolve += new
SiteMapResolveEventHandler(AppendQueryString);
if (!Roles.RoleExists("Administrators"))
Roles.CreateRole("Administrators");
if (!Roles.RoleExists("Friends"))
Roles.CreateRole("Friends");
}
З цього прикладу видно, що доступ до ролей можна отримати за допомогою класу Roles. Це не глобальна змінна, а статичний клас, доступний з будь-якого файлу проекту. Створення ролі виражається в тому, що в базі ASPNETDB.MDF в таблиці Roles з'являється новий запис.
Створити користувачів і призначити їм ролі можна у вбудованому додатку ASP .NET Configuration. Інформація про користувачів зберігається в таблицях aspnet_Users, aspnet_UsersInroles, aspnet_Membership. Паролі зберігаються в зашифрованому за допомогою хеш-функції вигляді. Навіть адміністратор не може його підглянути. Пароль, який вводиться в момент аутентифікації, теж хешуєтся і порівнюється зі значенням в базі. Зберігання в незашифрованому вигляді - це загроза безпеці. Будь-який користувач може зареєструватися, але при цьому не отримати роль і у нього не буде нових прав, поки адміністратор не призначить йому ролі. У цьому додатку можна також створювати правила доступу.
Установки конфігурації служб Membership і Role Manager, звичайно ж, записуються в файл Web.config:
<roleManager enabled="true" />
Таким чином включається служба Role Manager. Елемент authentication mode визначає спосіб аутентифікації. Якщо це Forms, то свої ім'я та пароль користувач вводить у формі. У локальній мережі (інтранет) можна автентифікувати користувачів за їх облікового запису, тоді його значення ставиться як Windows.
За допомогою елемента authentication запускається служба Membership:
authentication mode="Forms">
<forms loginUrl ="Login.aspx"/>
</authentication>
Інші доступні значення - Passport і None.
При значенні Passport користувачі авторизується за допомогою паспорта від Microsoft.
При аутентифікації за допомогою форм користувачі отримують доступ до сторінок в залежності від даних, введених на формі. До входу на сайт користувач вважається анонімним і використовується анонімна аутентифікація. Після того, як він пройшов аутентифікацію, користувач отримує файл-cookie, який використовується для подальших запитів.
Всього в елемента forms 8 можливих атрибутів наведених в таблиці 1.
Таблиця 1
name |
Визначає ім'я файлу-cookie, який надсилається користувачам після аутентифікації.За замовчуванням він називається. ASPXAUTH |
loginUrl: |
URL сторінки, з якої можна увійти в систему. За умовчанням це Login.aspx |
protection: |
Рівень захисту файлу-cookie на користувальницькій машині. Можливі значення - All,None, Encryption, і Validation |
timeout: |
Час, після закінчення якого cookie застаріває. Значення за замовчуванням - 30хвилин |
path: |
Шлях до файлів cookie |
requireSSL: |
Чи потрібно шифрувати дані по протоколу SSL |
slidingExpiration: |
Якщо True, то cookie застаріває через період часу timeout після останнього запиту.Інакше - через період часу timeout після створення |
cookieless: |
Місце зберігання ідентифікатора користувача. Значення за замовчуваннямuseDeviceProfile |
За замовчуванням усім користувачам доступні всі сторінки програми. Якщо потрібно обмежити доступ користувачів до якої-небудь сторінці, в Web.config вводиться запис:
<location path="Admin.aspx">
<system.web>
<authorization>
<allow roles="Admin" />
<deny users="*" />
</authorization>
</system.web>
</location>
Значення "?" позначає анонімного користувача, а "*" - всіх користувачів:
<allow users="?" />
В елементах allow і deny користувачі та ролі можуть бути задані перерахуванням:
<allow users="Alex, Dave" />
Елемент location визначає частину сайту, доступ до якої потрібно обмежити. У даному випадку це одна сторінка Admin.aspx. Перша частина авторизації дозволяє доступ до неї користувачам в ролі адміністратора Admin. Друга забороняє доступ усім іншим користувачам. Якщо елемент system.web знаходиться в кореневому вузлі файлу, то вкладений у нього вузол authorization визначає налаштування доступу до всього сайту. Коли неавторизований користувач намагається отримати доступ до сторінки, відкривається форма, визначена в атрибуті forms loginUrl. Якщо він введе ім'я та пароль користувача, який має доступ до сторінки, то вона відкриється, інакше знову йому або їй буде показана форма логіна.
Часто буває потрібно конфігурувати з точки зору безпеки систему навігації. Це значить, що меню не має показувати ті сторінки, для перегляду яких користувач не авторизований:
<siteMap defaultProvider="AspXmlSiteMapProvider"
enabled="true">
<providers>
<clear/>
<add name="AspXmlSiteMapProvider"
type="System.Web.XmlSiteMapProvider, System.Web,
Version=2.0.3600.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
siteMapFile="web.sitemap"
securityTrimmingEnabled="true"/>
</providers>
</siteMap>
Тут атрибут securityTrimmingEnabled, встановлений в true, змушує провайдера карти сайту фільтрувати вузли в залежності від ролі користувача. Це означає, що в елементах навігації буде видно тільки доступні сторінки. Член User сторінки дозволяє отримати доступ до всієї інформації, що стосується поточного користувача. Метод IsInRole визначає, чи належить користувач до ролі:
if (User.IsInRole("Admin"))
Page.Title = "Hello, Administrator!";
Властивість Identity дає інформацію про аутентифікації користувача:
if (User.Identity.IsAuthenticated)
User.Identity.AuthenticationType показує спосіб аутентифікації, встановлений в Web.config.
Можна обмежити доступ не тільки до сторінок, але і до частин сторінок.
Група Login знаходиться в панелі інструментів. Елемент управління LoginName дозволяє показати ім'я користувача:
Заходьте ще, <asp:LoginName ID="FCLoginName" Runat="server" />
отображаемый текст можно форматировать с помощью FormatString:
LoginStatus - це розумний елемент керування. Якщо користувач не аутентифікований, відображається гіперпосилання Login на сторінку входу на сайт. Якщо користувач авторизований, це ImageButton з командою Logout. Якщо її натиснути, то користувач виходить з системи. Текст посилань можна змінювати у властивостях LoginText і LogoutText або використовувати зображення:
<asp:LoginStatus ID="LoginStatus1" runat="server"
LoginText="Вход" LogoutText="Выход" />
<asp:LoginStatus ID="LoginStatus2" runat="server"
LogoutAction="Redirect" LogoutPageUrl="~/Default.aspx"
LoginImageUrl="~/Images/arrow_next.gif"
LogoutImageUrl="Images/arrow_prev.gif" />
Натискання на посилання Logout в цьому випадку перенаправити користувача на сторінку Default.aspx.
Елемент управління LoginView складається з двох шаблонів: AnonymousTemplate і LoggedInTemplate. Який з них використовується для відображення, залежить від того, переглядає сторінку анонімний користувач або авторизований.
Багато сайтів збирають інформацію про користувачів, щоб підлаштувати показ інформації під їх особисті смаки. Часто для цього використовують файли-cookie, об'єкти докладання і сесії.
У ASP. NET існують зручні способи зберігати інформацію користувача. Це функція персоналізації. Механізм персоналізації дозволяє встановити прямий зв'язок між користувачем і всіма даними, які належать до нього. При цьому його налаштування зберігаються не в файлах-cookie на комп'ютері користувача, які він може стерти, а на сервері. Їх можна помістити в будь-яке сховище даних.
Модель персоналізації проста і розширювана.
У файлі web.config міститься інформація про те, які дані про користувача необхідно зберігати. Вона записується в секції <configuration> <system.web> перед секцією authentication:
<profile>
<properties>
<add name="FirstName" />
<add name="LastName" />
<add name="LastVisited" />
<add name="Age" />
<add name="Member" />
</properties>
</profile>
Профіль персоналізації може зберігати дані про авторизованого користувача, але може обслуговувати і анонімного користувача. За замовчуванням анонімна персоналізація вимкнена. Щоб її включити, потрібно у файлі web.config створити запис
<anonymousIdentification enabled="true" />
Коли анонімна персоналізація включена, ASP. NET зберігає унікальний ідентифікатор для кожного анонімного користувача. Він посилається разом з будь-яким запитом. Ідентифікатор зберігається у файлі-cookie користувача, а додаткові дані, які вдалося зібрати про його вподобання, - на сервері. За замовчанням ім'я файлу-cookie -. ASPXANONYMOUS. Його можна поміняти за допомогою атрибуту cookieName елемента anonymousIdentification:
<anonymousIdentification enabled="true" cookieName=".intuit"/>
Час зберігання файлу-cookie у хвилинах визначається атрибутом cookieTimeout.
За замовчуванням воно дорівнює 100 000 хвилинам (69,4 дня). Від використання cookie можна відмовитися, наприклад, написавши
cookieless="UseUri"
В такому випадку ідентифікатор передається через рядок URL:
cookieless="AutoDetect"
У цьому випадку визначаються налаштування користувача. Якщо можливість зберігати cookie виключена, використовується рядок URL.
Анонімний ідентифікатор по своїй суті являє собою GUID (32-байтноє число, алгоритм генерації якого гарантує глобальну унікальність). Властивість AnonymousId об'єкта Request сторінки дозволяє отримати до нього доступ.
Для того щоб визначити, які дані можна зберігати для анонімного користувача, в елемент add name визначають атрибут allowAnonymous:
<add name="LastVisited" allowAnonymous="true"/>
SQL Server 2008 створює базу даних і працює з нею як з окремим файлом з розширенням. mdf. За замовчуванням файли баз даних розміщуються в каталозі
C: \ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ Data
Можна вручну створити файл бази даних для зберігання посвідчень і додати в неї таблиці з необхідними полями. Але це може неузгоджена з механізмом API Membership, оскільки він очікує базу даних певної структури. До того ж потрібно буде прописувати в конфігураційному файлі рядок сполук з цією базою та інші конфігураційні параметри, необхідні для роботи API Membership. Простіший варіант передбачили розробники Visual Studio 2010, включивши підтримку Membership в утиліту Web Site Administration Tool (WAT). Тепер база даних потрібної структури для зберігання посвідчень буде створена автоматично при першому запуску WAT, якщо в конфігураційному файлі прописана секція аутентифікації форм.
Запустимо утиліту WAT командою Website / ASP.NET Configuration. Зверніть увагу, як довго вона запускається. У панелі Solution Explorer клацнемо по кнопці Refresh.
Рис. 1
Ми бачимо, що утиліта WAT так довго запускалася тому, що додала до проекту каталог App_Data (якщо до цього його ще не було) і створила в Такий спосіб зберігання посвідчень користувачів в локальній базі даних разом з додатком дуже зручний, оскільки дозволяє переміщати сайт у будь-яке місце сервера або розгортати на будь-якому сервері без додаткових налаштувань підключення SQL Server. Та й структуру бази даних утиліта WAT створила такою, яка потрібна системі API Membership. Це означає, що всі класи Membership будуть узгоджені з сховищем посвідчень.
Утиліта WAT автоматично створює сховище посвідчень тільки в тому випадку, якщо виявить у кореневому конфігураційному файлі секцію
<authentication mode="Forms">
Якщо на момент запуску утиліти WAT файл конфігурації в кореневому каталозі програми не було або в ньому немає секції аутентифікації на основі форм, то утиліта базу даних не створює.ньому базу даних ASPNETDB.MDF, готову для зберігання посвідчень і узгоджену з API Membership.
Можливості глобалізації, авторизації і профілі користувачів, безсумнівно, полегшать життя програмістам, що створює web-сайти. Вони вирішують важливе завдання індивідуальної роботи для кожного користувача. Все те, що раніше доводилося робити вручну, тепер реалізовано й налагоджено самими творцями ASP. NET.
Language Integrated Query (LINQ) - проект Microsoft по додаванню синтаксису мови запитів, що нагадує SQL, в мови програмування платформи. NET Framework
LINQ являє собою набір функцій Visual Studio 2008, що розширюють потужні можливості запиту в синтаксисі мови C # і Visual Basic. LINQ представляє стандартні шаблони для створення запитів та безпека даних; технологія може бути розширена для підтримки потенційно будь-якого типу сховища даних. Visual Studio 2008 включає складання постачальників LINQ, що дозволяють використовувати LINQ з колекціями платформи. NET Framework, базами даних SQL Server, наборами даних ADO.NET і XML-документами.
Відображення реляційних даних на об'єктну модель завжди було однією з найбільш складних проблем при побудові об'єктно-орієнтованих систем. У більшості випадків, запити до бази даних пишуться на мові SQL, а їх результат конвертується в об'єкти. Розробник змушений одночасно працювати з двома різними видами даних, що значно збільшує трудовитрати на створення та підтримку програмного продукту і збільшує ймовірність помилок.
LINQ to SQL - проста, але досить потужна система об'єктно-реляційного відображення (ORM). У порівнянні з традиційною технологією ADO.NET застосування LINQ to SQL дозволяє значно спростити код, знизити ймовірність помилок і скоротити час розробки проекту. Найбільший виграш при цьому отримають розробники Web додатків, для яких, в новій версії ASP.NET передбачений спеціальний джерело даних, що дозволяє робити запити безпосередньо в Web сторінці.
LINQ to SQL підтримує всі основні можливості, необхідні для розробників на SQL. Можна вибирати дані, вставляти, оновлювати і видаляти дані з таблиць.
Вибірка (проекція) досягається написанням запиту LINQ обраною мовою програмування і подальшим виконанням цього запиту для отримання результатів. Засоби LINQ to SQL самі перетворять всі необхідні операції в необхідні операції SQL, які вам знайомі.
У наступному прикладі вибираються назв подій спорту, які потім відображаються у вікні консолі:
// Northwnd наслідуєтся від System.Data.Linq.DataContext
Northwnd nw = new Northwnd(@"northwnd.mdf");
var EventQuery =
from ev in nw.tblEvents
where ev.Category_ID=5
select ev.Event_Name;
foreach (var event in EventQuery)
{
Console.WriteLine(event);
}
Для виконання SQL Insert потрібно додати об'єкти в створену об'єктну модель і викликати метод SubmitChanges в DataContext. У наступному прикладі нова подія і відомості про неї додаються до tblEvents за допомогою методу InsertOnSubmit:
// Northwnd наслідуєтся від System.Data.Linq.DataContext.
Northwnd nw = new Northwnd(@"northwnd.mdf");
tblEvent event = new tblEvent();
event.Event_Name = "Подія";
event.Start_date = Convert.StringTODate("14/06/2011");
event.Start_date = Convert.StringTODate("15/06/2011");
event.Discription = "Опис";
nw.Customers.InsertOnSubmit(cust);
nw.SubmitChanges ();
У даному місці новий об'єкт Customer доданий в об'єктну модель. У LINQ to SQL зміна не буде записано в базу даних, поки не буде викликаний метод SubmitChanges.
Щоб зробити Update запису в базі даних, спочатку слід витягти елемент і змінити його безпосередньо в об'єктній моделі. Після зміни об'єкта необхідно викликати метод SubmitChanges в DataContext, щоб оновити базу даних.
У наступному прикладі витягуються всі клієнти з Москви. Потім назва міста змінюється з "14/06/2011 " на "15/06/2011". Нарешті, викликається метод SubmitChanges для відправлення змін до бази даних:
Northwnd nw = new Northwnd(@"northwnd.mdf");
var DateQuery =
from ev in nw.tblEvents
where ev.Start_date=”14/06/2011”
select ev;
foreach (var event in DateQuery)
{
event.Start_Date = Convert.StringTODate("15/06/2011");
}
nw.SubmitChanges();
Щоб виконати операцію Delete для елемента, необхідно видалити його з колекції, до якої він входить, а потім викликати метод SubmitChanges в DataContext, щоб застосувати зміна. Але LINQ to SQL не виконує операцію каскадного видалення. Тому потрібно буде самому видаляти дані з інших таблиць також.
У наступному прикладі з бази даних витягується подія, Event_ID якого дорівнює 2. Потім, після підтвердження вилучення рядка клієнта, викликається метод DeleteOnSubmit, необхідний для видалення об'єкта з колекції. Нарешті, викликається метод SubmitChanges для передачі видалення в базу даних:
Northwnd nw = new Northwnd(@"northwnd.mdf");
var deleteEvent =
from ev in nw.tblEvents
where ev.Event_ID= "2"
select ev;
if (deleteEvent.Count() > 0)
{
nw.tblEvents.DeleteOnSubmit(deleteEvent.First());
nw.SubmitChanges();
}
Отже для вибору, додавання, оновлення і видалення даних з бази даних зручно використовувати LINQ to SQL, оскільки він сам створює зєднання і передачу даних у базу.
Технологія ASP .NET побудована на об'єктно-орієнтованому подієво-керованому підході до створення web-сторінки. Класи, що використовуються для генерації web-сторінок, є частиною бібліотеки .NET Frameworks. Для багатьох з них існують аналоги в Windows Forms, що зближує програмування настільних додатків з програмуванням web-додатків. Сторінки на АSP .NET можна писати на різних мовах таких як C#, Visual Basic, J# та інші мови, які належать до .NET Framework. Принципом роботи ASP .NET є те, що він створює HTML сторінку використовуючи одну з мов .NET Framework. За допомогою цієї технології можна розділити роботу дизайнерів і програмістів. Ця технологія може бути використана для створення сучасних веб-порталів, які потребують рішення складних задач програмування для їх побудови.
Можливості глобалізації, авторизації і профілі користувачів, безсумнівно, полегшать життя програмістам, що створює web-сайти. Вони вирішують важливе завдання індивідуальної роботи для кожного користувача. Все те, що раніше доводилося робити вручну, тепер реалізовано й налагоджено самими творцями ASP. NET.
Для вибору, додавання, оновлення і видалення даних з бази даних зручно використовувати LINQ to SQL, оскільки він сам створює зєднання і передачу даних у базу.