Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 634
Эндрю Троелсен
Замечание. Все события типа Page работают с делегатом System.EventHandler.
Роль атрибута AutoEventWireUp
Чтобы обработать события для страницы, нужно добавить в блок ‹script› или файл с внешним кодом поддержки подходящий обработчик события. В отличие от ASP.NET 1.x. теперь не требуется вводить всю программную логику события вручную. Нужна только определить соответствующий метод, используя следующий шаблон.
protected Page_nameOfTheEvent(object sender, EventArgs e)
Например, cобытие Unload можно обработать так.
public partial class _Default: System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
}
protected void Page_Unload(object sender, EventArgs e) {
}
}
Этот метод, как по волшебству, вызывается при выгрузке страницы (несмотря на то, что вы не применяли синтаксис событий C#), поскольку атрибут AutoEventWireUp устанавливается равным true (истина) по умолчанию в директиве ‹%@Page%› вашего файла *.aspx.
‹%@ Page Language="C#"
AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %›
Как подсказывает имя этого атрибута, при его активизации будет создана необходимая оснастка событий в рамках автоматически генерируемого парциального класса, описанного в этой главе выше. Если установить этот атрибут равным false, не будут вызваны обработчики событий ни для Load, ни для Unload страницы Default (вы можете проверить это непосредственно, установив контрольные точки в пределах обработчиков событий Page_Load() и Page_Unload()).
Однако, если вы используете стандартный синтаксис событий C# для обработки событий Load и Unload, как показано ниже:
public partial class _Default: System.Web.UI.Page {
public _Default() {
// Явный перехват событий Load и Unload.
this.Load += new EventHandler(Page_Load);
this.Unload += new EventHandler(Page_Unload);
}
protected void Page_Load(object sender, EventArgs e) {
Response.Write("Сработало событие Load!");
}
protected void Page_Unload(object sender, EventArgs e) {
// Направить данные в HTTP-ответ здесь невозможно,
// поэтому выполняется запись в локальный файл.
System.IO.File.WriteAllText(@"C:\MyLog.txt", "Выгрузка страницы.");