Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4_kurs_7_semestr_Metodichni_vkazivki_-_do_laboratornikh_zanyat.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
9.93 Mб
Скачать

2.2. Практичне заняття 2. Створення шаблонних сторінок MasterPage, користувацьких елементів управління UserController та застосування елементів навігації по додатку

Мета лабораторного заняття: Вивчити способи форматування стилю веб-додатків. Освоїти основні принципи та вимоги застосування MasterPage для створення єдиного стилю веб-додатку. Набути практичні навички створення власних елементів управління на основі елементу UserController. Набути практичних навичок застосування елементів керування для реалізації навігації по додатку. Вивчення стандартних елементів навігації по веб-додатку та застосування їх при його розробці.

Приклад 1. Створення еталонних сторінок MasterPage. Для додавання еталонної сторінки у проект необхідно вибрати в пункті меню AddNewItem (рис. 2.1) та задатися шаблоном створення еталонних сторінок MasterPage (рис. 2.2).

Рис. 2. 1. Вибір пункту меню для додавання MasterPage

Рис. 2. 2. Створення сторінки MasterPage

Програмний код, що створено за замовчуванням:

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

<!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>

<asp:ContentPlaceHolder id="head" runat="server">

</asp:ContentPlaceHolder>

</head>

<body>

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

<div>

<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">

</asp:ContentPlaceHolder>

</div>

</form>

</body>

</html>

Щоб отримати чіткий поділ сторінки на логічні частини – використовують таблиці. Побудуємо таблицю з трьома рядками, де у верхньому рядку знаходиться заголовок для всіх сторінок, а у другому – довільний зміст; вона складається із двох чарунок, в кожній із яких розташовано по одному ContentPlaceHolder. Таблицю можна задати програмним шляхом:

<table class="style1">

<tr>

<td colspan="2" style="text-align: center; font-weight: 700; font-family: Arial">

<h1>

Заголовок страницы</h1>

</td>

</tr>

<tr>

<td class="style2">

</td>

<td class="style2">

</td>

</tr>

<tr>

<td colspan="2" style="text-align: center">

@Авторские права</td>

</tr>

</table>

Або можна вставити, використовуючи пункт меню InsertTable в режимі Design (рис. 2. 3), відформатувати її, а програмний код буде згенеровано автоматично. У формі, що відкриває можна задати структуру та формат створюваної таблиці (рис. 2. 4).

Рис. 2. 3. Пункт меню для створення таблиці

Рис. 2. 4. Форматування таблиці

Для здійснення об’єднання двох чарунок можна скористатися контекстним меню (рис. 2. 5).

Рис. 2. 5. Об’єднання чарунок створеної таблиці

У чарунки другого рядка додаємо об’єкти ContentPlaceHolder програмним шляхом:

<asp:ContentPlaceHolder ID= "c1" runat="server"> </asp:ContentPlaceHolder>

Або шляхом розташування графічного компонента з набора інструментів, знаходячись у режимі Дизайна форми (рис. 2. 6).

Рис. 2. 6. Розташування елементу ContentPlaceHolder через дизайнер форми

Два створених елемента ContentPlaceHolder визначают місця, куди вставиться зміст сторінок-потомків. Запустивши на виконання створений проект, користувач побачить у браузері пусту сторінку, оскільки не створено жодну контент-сторінку, яка б наслідувала створений дизайнерський шаблон.

Задамо в якості першої контент-сторінки сторінку default.aspx, яка була створена автоматично в ході стоврення проекту. Щоб сторінку default.aspx застосувати як контет-сторінку необхідно задати значення властивості MasterPageFile у значення MasterPage.master для директиви @Page, а саме:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile= "Default.aspx.cs" Inherits="_Default" MasterPageFile="~/MasterPage.master"%>

На сторінці – нащадку шаблона можуть розташовуватися лише елементи типу Content, кожний з яких відповідає відповідному одному елементу ContentPlaceHolder шаблону. Неможна додавати елементи поза цими обьєктами, оскільки програмне середовище не зможе поєднати головну сторінку зі сторінкою-контетом. Ідентифікатор ContentPlaceHolder повинен співпадати з атрибутом ContentPlaceHolderID відповідного об’єкту Content.

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

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" MasterPageFile="~/MasterPage.master"%>

<asp:Content ContentPlaceHolderID="c1" runat="server"><asp:Image ID="i1" runat="server" ImageUrl="image/1.jpg" /></asp:Content>

<asp:Content ContentPlaceHolderID="c2" runat="server">Форд-Фиеста модель 2012 года выпуска <br /></asp:Content>

Результат застосування сторінки-шаблони показано на рис. 2. 7.

Рис. 2. 7. Вигляд веб-додатку у браузері

Додамо до проекту ще одну сторінку-контета, задамо для неї створений шаблон (рис. 2. 8).

Рис. 2. 8. Додавання нового елемента до веб-додатку

Якщо встановити позначку в полі Select master page, то можна буде задатися шаблоном для створюваної форми. В якості шаблону використаємо розроблений шаблон MasterPage.master (рис. 2. 9).

Рис. 2. 9. Встановлення шаблонної сторінки для нової форми

Відформатуємо створений текст другої сторінки контента

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEvent­Wireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" Title="Untitled Page" %>

<asp:Content ID="Content1" ContentPlaceHolderID="c1" runat="server"> <asp:Image ID="i2" runat="server" ImageUrl="image/2.jpg" /></asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="c2" runat="server">Форд-Фокус модель 2013 года выпуска <br /></asp:Content>

Вставимо гиперпосилання до першої сторінки-контенту

<asp:Content ContentPlaceHolderID="c2" runat="server">Форд-Фиеста модель 2012 года выпуска <br />

<asp:HyperLink ID="h1" runat="server" NavigateUrl= "~/Default2.aspx"> Дальше </asp:HyperLink>

Та назначимо цю сторінку першою для завантаження. Результат створення еталонної сторінки та перехід між двома сторінками-контентами показано на наступних рисунках 2.10 та 2.11.

Рис. 2. 10

Рис. 2. 11

Приклад 2. Створення користувацького елементу управління. Для того, щоб мати можливість створити власний елемент управління необхідно додати до проекту WebControlMaster (рис. 2. 12).

Рис. 2. 12. Додавання нового елементу до веб-додатку

Автоматично створюється код:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile= "WebUserCon­t­rol.ascx.cs" Inherits="WebUserControl" %>

Нехай в якості користувацького елементу буде створено пара Текстове поле + Кнопка. При натисканні на кнопку властивості елемента заповнюються даними з текстового поля. В класі елемента управління задамо 2 властивості name та greeting. Для того, щоб не порушувати інкапсюляцію поля задани як приватні. Для забезпечення доступу до їх значень опишемо 2 метода-властивості наступним чином:

string name;

string greeting;

public string Greeting

{

get

{ return greeting; }

set

{ greeting = value; }

}

public string Name

{

get

{ return name; }

set

{ name = value; }

}

Вигляд користувацького елементу управління у формі дизайнера показано на наступному рисунку 2. 13.

Рис. 2. 13. Вигляд створеного користувацького елемента

Додамо тект до обробника події натискання на кнопку:

protected void btnClick_Click(object sender, EventArgs e)

{

Name = txtName.Text;

}

Тепер з SolutionExplorer можна перетягнути створений елемент на будь-яку сторінку проекту. Крім того його можна додати до списку інструментів програмного середовища. Щоб використовувати користувацький елемент на сторінці, його необхідно зареєструвати. Директива Register з’являється автоматично при розташуванні користувацького елементу на сторінці.

<%@ Register src="WebUserControl.ascx" tagname="GreetingControl" tagprefix= "user" %>

Атрибут tagprefix директиви Register задає префікс за допомогою якого даний користувацький елемент можна створивати на сторінках. Його значення може бути будь-яким, окрім asp, яке зарезервоване для вбудованих елементів управління ASP.NET. Атрибут tagname – це ім’я елемента, що йде після префіксу; атрибут src задає шлях до файлу користувацького елемента управління.

Задамо значення для нового елемента управління

<user:GreetingControl ID="hello" runat="server" Name="Вася" Greeting="Привет!" />

Результат виконання програмного коду наведено на наступних рис. 2.14.

Рис. 2. 14. Результат виконання коду в браузері

Приклад 3. Більш доречним прикладом створення користувацького елементу управління може бути елемент управління – нижний колонтитул сторінки, що може містити інформацію про інтелектуальні права, адресу веб-мастера, або дату останнього оновлення.

Додамо до проекту, наведеного в прикладі 1, користувацький елемент управління, що буде містити 3 мітки текст яких буде задаватися, виходячи із системних даних. Програмний код для створення вказаного елемента управління наступний:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserCon­trol.ascx.cs" Inherits="WebUserControl" %> Copyright © <asp:Label ID= "lblyear" runat="server" /> by your company name <br /> замечания, вопросы? ОБратитесь к веб-мастеру

<asp:Label ID="lblemail" runat="server" /> <br /> дата последней модификации страницы:

<asp:Label ID="lbllastMode" runat="server" />

В обробнику події завантаження сторінки створимо програмний код, що надасть змогу заповнити мітки поточними даними:

protected void Page_Load(object sender, EventArgs e)

{ lblyear.Text = DateTime.Now.Year.ToString();

lblemail.Text = "<a href='mailto:webmaster@" +Request.Url.Host.Replace("www.", "") + "'>webmaster</a>";

lbllastMode.Text = System.IO.File.GetLastWriteTime(Server.MapPath (Request.Url.Local­Path)).ToLongDateString(); }

В результаті виконання коду обробника події завантаження сторінки поля користувацького елементу управління заповняться даними стосовно поточного року, створиться гіперпосилання для переходу на сторінку відправки електроного листа та визначиться дата останього оновлення проекту. У дизайнері форм вміст користувацького елемента управління буде мати наступний вигляд, як на рис. 2. 15.

Рис. 2. 15. Вигляд користувацького елементу в дизайнері форми

Створений користувацький елемент управління можна розташувати на еталонній сторінці у секції нижнього колонтитула (рис. 2. 16).

Рис. 2. 16. Розташування користувацького елемента на шаблонній сторінці

Розмістивши користувацький елемент на еталонній сторінці проекту, надається можливість на кожній сторінці проекту отримати визначений нижний колонтитул (рис. 2. 17).

Рис. 2. 17. Вигляд користувацького елемента на сторінці в браузері

Приклад 4. Створення стилю для елементів управління за допомогою Style Builder. В режимі Design необхідно обрати елемент управління та з контекстного меню вибрати пункт New Style (рис. 2.18).

Рис. 2.18. Додавання нової таблиці стилів

Встановивши значення для створення нового стилю, в коді програми автоматично створюється наступний фрагмент:

<style type="text/css">

.newStyle1

{ font-family: "Monotype Corsiva";

font-size: large;

font-weight: bold;

font-style: italic;

font-variant: normal;

text-transform: capitalize;

color: #800000;

text-decoration: blink;

background-repeat: repeat-x; }

</style>

Вказуючи в атрибут class=” newStyle1” можна задати стиль для обраного елемента управління.

Приклад 5. Створення стилю за допомогою зовнішньої таблиці стилів.

Для того, щоб створити стиль за допомогою зовнішньої таблиці стилів необхідно додати в проект новий елемент (рис. 2.19).

Рис. 2.20. Додавання нового елемента до веб-додатку

Після чого з’явиться порожній файл каскадної таблиці стилів. Натиснувши Enter можна використати список всіх можливих атрибутів стилю (рис. 2.21).

Рис. 2.21. Додавання властивостей і їхніх значень до таблиці стилів

Задамо, наприклад стиль для всіх абзаців сторінок наступний стиль:

p

{ text-align:justify;

font-family:Book Antiqua;

font-weight:normal;

color:GrayText; }

Додамо до веб-сторінки посилання на створену каскадну таблицю стилів (рис. 2.22).

Рис. 2.22. Додавання каскадної таблиці стилів до форми

При виборі пункту меню AttachStyleSheet відкривається вікно, де можна задати файл зовнішньої таблиці стилів (рис. 2.23).

Рис. 2.23. Обрання необхідно таблиці стилів для додавання

В програмний код сторінки автоматично додасться необхідний фрагмент коду:

<link href="StyleSheet.css" rel="stylesheet" type="text/css" />

Приклад 6. Створення теми. Для додавання темі до проекту веб-додатку необхідно виконати наступні дії:

1. Створити каталог App_Theme в тому випадку, якщо він ще не створений. У каталозі створити підкаталог з темою, привласнивши їй ім’я;

2. У створеному каталозі теми додати файл оформлення. Для виконання цієї операції необхідно виконати команду додавання нового SkinFile (рис. 2.24).

Рис. 2.24. Додавання нового елементу до веб-додатку

Visual Studio попередить про те, що створюваний файл оформлення буде розміщено в папку App_Theme (рис. 2.25).

Рис. 2.25. Вигляд системного повідомлення

3. Ввести дескриптори опису оформлення елементів управління додатку.

4. У файлі web.config задати тему, що буде використовуватися для додатку за допомогою директиви pages. В цьому випадку тема буде застосована до всіх сторінок веб-додатку. У випадку, коли необхідно застосувати тему лише до обраної сторінки, можна її задати програмним шляхом, наприклад встановити її для події Page_PreInit

protected void Page_PreInit(object sender, EventArgs e)

{

Page.Theme = "ім’я_каталогу_теми";

}

Для веб-додатку, створеного в лабораторній роботі 4, розташуємо компонент календар. По замовчуванню календар на веб-сторінці виглядає наступним чином (рис. 2.26).

Рис. 2.26. Стандартний вигляд елемента управління „календар”

Створимо для календаря стиль, щоб його вигляд був наступним (рис. 2.26).

Рис. 2.26. Оновлений вигляд календаря за рахунок застосування теми

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

<asp:Calendar runat="server" BackColor="Honeydew" BorderColor="Teal" Border­Width="1px" CellPadding="1" DayNameFormat="Shortest" Font-Names= "Ver­dana" Font-Size="8pt" ForeColor="DarkSlateGray" Height="200px" Width="220px">

<SelectedDayStyle BackColor="#009999" Font-Bold="True" ForeColor= "#CCFF99" />

<SelectorStyle BackColor="#99CCCC" ForeColor="#336666" />

<WeekendDayStyle BackColor="#C0FFC0" />

<OtherMonthDayStyle ForeColor="#999999" />

<TodayDayStyle BackColor="#99CCCC" ForeColor="White" />

<NextPrevStyle Font-Size="8pt" ForeColor="#CCCCFF" />

<DayHeaderStyle BackColor="#80FF80" ForeColor="#336666" Height="1px" />

<TitleStyle BackColor="Green" BorderColor="#3366CC" BorderWidth="1px" Font-Bold="True" Font-Size="10pt" ForeColor="White" Height="25px" /> </asp:Calendar>

Тепер укажемо для першої сторінки веб-додатку створену тему. Для цього запишемо програмний код для обробника події пре ініціалізації сторінки:

protected void Page_PreInit(object sender, EventArgs e)

{ Page.Theme = "SkinFile"; }

В результаті виконання описаних дій сторінки веб-додатку будуть мати наступний вигляд (рис. 2.27, 2.28).

Рис. 2.27. Веб-сторінка із застосованою темою

Рис. 2.28. Веб-сторінка без застосованою темою

З наведений рисунків можна впевнитися, що тема застосовується лише на тій сторінці, де є відповідний код підключення. Створимо ще один іменований скін для календаря:

<asp:Calendar runat="server" SkinId="June" BackColor="#C0FFC0" BorderColor= "Teal" BorderWidth="1px" CellPadding="1" DayNameFormat="Shortest" Font-Names= "Verdana" Font-Size="8pt" ForeColor="DarkSlateGray" Height="200px" Width="220px">

<SelectedDayStyle BackColor="#009999" Font-Bold="True" ForeColor= "#CCFF99" />

<SelectorStyle BackColor="#99CCCC" ForeColor="#336666" /> <WeekendDayStyle BackColor="#C0FFC0" />

<OtherMonthDayStyle ForeColor="#999999" />

<TodayDayStyle BackColor="#99CCCC" ForeColor="White" />

<NextPrevStyle Font-Size="8pt" ForeColor="#CCCCFF" />

<DayHeaderStyle BackColor="#C0FFC0" ForeColor="#FF8000" Height="1px" />

<TitleStyle BackColor="Green" BorderColor="#3366CC"

BorderWidth="1px" Font-Bold="True" Font-Size="10pt"

ForeColor="White" Height="25px" /> </asp:Calendar>