Чтение онлайн

ЖАНРЫ

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

Если выбрать представление HTML с помощью кнопки внизу окна компоновки, мы увидим код, созданный внутри файла

.aspx
:

<%@ Page language="#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="PCSWebAppl.WebForm1" %>

<html>

 <head>

<meta name=vs_targetSchema content="Internet Explorer 5.0">

<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">

<meta name="CODE_LANGUAGE" Content="C#">

 </head>

 <body MS_POSITIONING="GridLayout">

<form method="post" runat="server">

</form>

 </body>

</html>

Здесь

элемент
<html>
заполнен несколькими метаданными, которые нас не касаются, и элементом
<form>
для размещения кода ASP.NET. Наиболее важной вещью в этом элементе является атрибут
runat
. Точно так же, как в блоках серверного кода, которые мы видели в начале раздела, он задан как server, и значит, обработка формы будет иметь место на сервере. Если не включить этот атрибут, то никакой серверной обработки выполняться не будет, и форма не будет ничего делать.

Другая интересная вещь в отношении этого кода состоит в теге

<@% Page %>
в начале файла. Этот тег определяет характеристики страницы, которые важны для нас как разработчиков приложения Web на C#. Прежде всего здесь существует атрибут
language
, который определяет, что на этой странице будет использоваться C#, как мы видели раньше в блоках
<script>
(значение по умолчанию для приложения Web является VB.NET, хотя это может быть изменено через конфигурацию IIS). Следующие три атрибута являются необходимыми, так как код, управляющий страницей, был задан VS для размещения в отдельном файле
WebForm1.aspx.cs
. Этот файл, который мы сейчас рассмотрим, содержит определение класса, используемого в качестве базового для страницы форм Web. (Теперь мы начинаем видеть, как ASP.NET соединяется с насыщенной объектной моделью). В этом файле для создания HTML базовый класс будет использоваться в соединении с кодом.

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

.aspx
должен включать весь код C# в блоках
<script>
, как упоминалось ранее.

Так как мы предоставляем специальный базовый класс для страницы, мы будем иметь специальные события. Чтобы гарантировать, что IIS знает об этом, мы используем атрибут

AutoEventWireup
, который означает, что обработчик событий
Page_Load
, вызываемый при загрузке страницы, связывается автоматически с событием
OnPageLoad
. Задавая этот атрибут как
false
, мы должны предоставить, если потребуется, свой собственный код для выполнения этого, что даст нам большую свободу действий.

Теперь посмотрим на "код позади" кода, сгенерированного для этого файла. Чтобы сделать это, щелкнем правой кнопкой мыши на

WebForm1.aspx
в утилите анализа решения (solution explorer) и выберем View Code. Код
WebForm1.aspx.cs
должен загрузиться в текстовый редактор. Прежде всего можно видеть объявление пространств имен для приложения Web, за которым следует используемое по умолчанию множество ссылок, требуемое для базового использования:

namespace PCSWebAppl {

 using System;

 using System.Collections;

 using System.ComponentModel;

 using System.Data;

 using System.Drawing;

 using System.Web;

 using System.Web.SessionState;

 using System.Web.UI;

 using System.Web.UI.WebControls;

 using System.Web.UI.HtmlCotrols;

Двигаясь

дальше, мы видим определение
WebForm1
— базового класса, используемого для страницы .aspx. Этот класс наследует из
System.Web.UI.Page
, базового класса форм Web:

 /// <summary>

 /// Краткое описание WebForm1

 /// </summary>

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

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

Page_Init
, вызываемого во время активации страницы и используемого VS для кода, связанного с созданием временных добавлений к форме (хранимых в
InitializeComponent
, который вызывается этим обработчиком). Существует также обработчик событий Page_Load, упоминавшийся ранее:

public WebForm1 {

Page.Init += new System.EventHandler(Page_Init)

}

protected void Page_Load(object sender, System.EventArgs e) {

// Поместите здесь код пользователя для инициализации страницы

}

protected void Page_Init(object sender, EventArgs e) {

//

// CODEGEN: Этот вызов требуется для ASP.NET Windows

// Form Designer.

//

InitializeComponent;

}

Сам метод

InitializeComponent
содержится в блоке
#region
, поэтому мы используем схематичное представление в VS, чтобы его скрыть, поскольку он быстро заполнится сгенерированным кодом VS (так же как аналогичный ему метод в коде форм Windows):

#region код, созданный Web Form Designer

/// <summary>

/// Метод, требуемый для поддержки Designer; не изменяйте

/// содержимое этого метода с помощью редактора кода.

/// </summary>

private void InitializeComponent {

this.Load += new System.EventHandler(this.Page_Load);

}

#endregion

 }

}

Так как

AutoEventWireup
был задан как
false
, то
InitializeComponent
должен зарегистрировать
Page_Load
с событием
Load
.

Строго говоря, этот код больше, чем требуется для простой страницы формы Web ASP.NET, которую мы уже видели (хотя и в качестве тривиального примера). Однако созданная структура приспособлена для целей повторного использования и расширения с помощью технологий C#, не требуя заметного объема накладных расходов, поэтому мы будем ее использовать.

Серверные элементы управления ASP.NET

Созданный нами код делает пока еще очень немногое, поэтому далее нам нужно добавить некоторое содержимое. Можно сделать это в VS, используя построитель форм Web, который поддерживает режим перетаскивания элементов и добавления через код точно так же, как построитель форм Windows.

Поделиться с друзьями: