В основу разработки Web-приложений на ASP.NET положена модель разделения кода представления и кода реализации, рекомендуемая Майкрософт при создании динамических документов. Страницы ASP.NET имеют расширение .aspx. Программный код может размещаться либо в отдельном файле, либо на странице внутри специального тэга для сценариев. Файл с кодом обычно имеет расширение .aspx.cs (.aspx.vb) и имя, совпадающее с именем основного ASPX файла.
Внедрение программного кода в страницу aspx похоже на то, что используется в обычных asp-страницах.
Страницы ASP.NET обычно содержат директивы, которые позволяют указать свойства и конфигурацию для страницы. Директивы используются ASP.NET в качестве инструкций, определяющих способ обработки страницы. Они не отображаются в разметке, которая отправляется клиенту.
Наиболее часто используется директива @ Page, с помощью которой можно задавать множество параметров:
серверный язык программирования для кода на странице;
место нахождения кода сервера (непосредственно в странице или в отдельном файле класса);
|
|
параметры отладки и трассировки.
имеет ли страница связанную главную страницу.
Если директива @ Page не включена в страницу, или если эта директива не включает определенные настройки, параметры наследуются из файла конфигурации для приложения (файл Web.config) или из файла конфигурации узла (файл Machine.config). Наиболее важные атрибуты директивы перечислены в таблице 4.1.
Таблица 4.1
Атрибуты директивы @ Page
AutoEventWireup | Автоматическая обработка событий страницы |
Buffer | Управляет буферизацией страницы. По умолчанию буферизуется |
ClassName | Позволяет назначать имя класса, сгенерированного данной страницей |
CodeFile | Название файла с отделенным кодом для данной страницы |
Culture | Устанавливает набор региональных параметров, т.е. язык, формат валюты, даты, чисел |
Debug | Если true, на страницу выводится отладочная информация |
Trace | Вывод трассировочной информации |
EnableViewState | Сохранение состояния страницы. По умолчанию она сохраняется |
EnableTheming | Позволяет включить или выключить поддержку тем оформления. По умолчанию включено |
Inherits | Класс, от которого наследуется класс данной страницы в технологии отделенного кода |
IsAsync | Показывает, обрабатывается ли страница асинхронно. |
Language | Язык, используемый во внедренном коде |
WarningLevel | Наибольший допустимый уровень предупреждений компилятора |
CompilerOptions | Опции компилятора |
Кроме директивы @ Page, в текст можно включить другие директивы, которые содержат дополнительные параметры, специфичные для страницы.
Для понимания сути основных технологических решений рассмотрим последовательно создание страницы ASP.NET, которая будет содержать текстовое поле для ввода имени и кнопку, событие нажатия на которую будет обрабатываться на сервере. Обработка будет состоять в выводе сообщения с использованием введенного имени.
|
|
Примечание! Для лучшего понимания сущности описываемых процессов действия по созданию файлов рекомендуется выполнять в простом редакторе (например, Блокнот).
Возьмем за основу такую статическую страницу:
<html>
<head>
<title>Простейшая ASP.NET страница</title>
</head>
<body>
<form id="form1">
<h1>Welcome to ASP.NET</h1>
<p>Введите свое имя</p>
<input type=text ID="TextBox1">
<input type=button ID="Button1" value="Click">
</form>
</body>
</html>
С целью придания странице динамических свойств заменим статические элементы на серверные. Этим сделаем их доступными для обработки на сервере:
<html>
<head>
<title> Простейшая ASP.NET страница </title>
</head>
<body>
<form id="form1" runat="server">
<h1>Welcome to ASP.NET</h1>
<p>Введите свое имя</p>
<p>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Click" />
</p>
<p>
<asp:Label ID="Label1" runat="server"></asp:Label>
</p>
</form>
</body>
</html>
Серверными элементами в этом коде являются: форма (атрибут runat="server"), текстовое поле (<asp:TextBox…>), кнопка (<asp:Button…>) и надпись (<asp:Label…>). Если этот код поместить в файл с расширением.aspx и открыть в браузере через сервер, то внешне все будет выглядеть так, как и в статической HTML-странице. Посмотрев код, который получил браузер с сервера, увидим, что все серверные элементы подверглись обработке: в форме появилось скрытое поле, серверные управляющие элементы заменены на input и span.
Для того, чтобы события этой страницы обрабатывались на сервере, включим в текст страницы тег <script runat="server"> с обработчиком на языке C#, и свяжем его с событием, поместив соответствующий атрибут (OnClick="Button1_Click") в серверный управляющий элемент кнопка:
<%@ Page Language="C#" %>
<html>
<script runat="server">
Void Button1_Click(object sender, System.EventArgs e)
{
Label1.Text = "Welcome, " + TextBox1.Text;
}
</script>
<head runat="server">
<title> Простейшая ASP.NET страница </title>
</head>
<body>
<form id="form1" runat="server">
<h1>Welcome to ASP.NET</h1>
<p>Введите свое имя</p>
<p>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Click" OnClick="Button1_Click" />
</p>
<p>
<asp:Label ID="Label1" runat="server"></asp:Label>
</p>
</form>
</body>
</html>
Обработчик события должен объединить текст из поля с именем TextBox1 со строкой приветствия.
Получилось законченное Web-приложение, созданное по технологии ASP.NET. Функционирует оно следующим образом. При первом поступлении запроса на страницу сервер обработает все элементы с атрибутом runat="server". Код из тега script компилируется и помещается в специальный буфер, серверные элементы управления заменяются на HTML-элементы, пользователь получает страницу с предложением ввести имя и нажать кнопку. После нажатия кнопки данные из формы отправляются на сервер. Сервер вновь обращается к странице, скрытые поля используются для идентификации элементов и состояния приложения. Сервер выполняет откомпилированный код, который изменяет свойства серверного элемента (Label1.Text). После этого вновь производится замена серверных элементов, но тег span, которым заменяется asp:Label, уже содержит текст приветствия и имя пользователя. Пользователь видит в окне новое содержание, при этом вся обработка была выполнена на сервере.
Технология позволяет хранить и использовать код обработки и разметки в отдельных файлах. При этом обработчик как метод класса страницы помещается в файл с расширением aspx.cs, а имя файла и класса помещается в директиву @ Page. Для нашего примера файл с кодом страницы (например3.aspx):
|
|
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="3.aspx.cs" Inherits="_Default" %>
<html>
<head runat="server">
<title>Пример с кодом обработчика в отдельном файле</title>
</head>
<body>
<form id="form1" runat="server">
<h1>Welcome to ASP.NET</h1>
<p>Введите свое имя</p>
<p>
<asp:TextBox ID="TextBox1" runat="server"/>
<asp:Button ID="Button1" runat="server" Text="Click" onclick="Button1_Click"/>
</p>
<p>
<asp:Label ID="Label1" runat="server"></asp:Label>
</p>
</form>
</body>
</html>
Файл с кодом обработчика (3.aspx.cs):
using System;
public partial class _Default: System.Web.UI.Page
{
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text ="Welcome, "+TextBox1.Text;
}
}
Следует отметить, что разницы между этими способами (обработчик в тексте страницы и в отдельном файле) с точки зрения функционирования приложения нет.