Событие Error

Событие Error

Еще одним событием, которое может происходить в цикле существования страницы, является событие Error, которое также работает в паре с делегатом System.EventHandler. Это событие возникает в том случае, когда метод производного от Page типа генерирует исключение, оставшееся без явной обработки. Предположим, что вы обработали событие Click для типа Button на странице, и в пределах обработчика события (здесь он называется btnGetFile_Click) вы пытаетесь записать, содержимое локального файла в HTTP-ответ.

Также предположим, что вам не удалось проверить присутствие этого файла с помощью стандартной технологии структурированной обработки исключений. Если при этом вы предусмотрели обработку события Error страницы, вы получите шанс решить возникшую проблему, чтобы пользователь не увидел безобразную информацию об ошибке. Рассмотрите следующий программный код.

public partial class _Default: System.Web.UI.Page {

 public _Default() {

 …

 // Создание объекта для события Error.

 this.Error += new EventHandler(_Default_Error);

 void _Default_Error(object sender, EventArgs е) {

  // Уничтожение текущего ответа, сообщение об сшибке

  // и информирование среды выполнения о том,

  // что ошибка обработана.

  Response.Clear();

  Response.Write("Извините… не могу найти необходимый файл.");

  Server.ClearError();

 }

 protected void btnGetFile_Click(object sender, EventArgs e) {

  // Попытка открыть несуществующий файл.

  // Это порождает событие Error для данной страницы.

  System.IO.File.ReadAllText(@"C:IDontExist.txt");

 }

 …

}

Здесь обработчик события Error начинается с очистки всего содержимого имеющегося HTTP-ответа и вывода общего сообщения об ошибке. Чтобы получить доступ к конкретному объекту System.Exception, вы можете использовать метод HttpServerUtility.GetLastError(), доступ к которому обеспечивает унаследованное свойство Server.

void _Default_Error(object sender, EventArgs e) {

 Response.Clear();

 Response.Write("Извините… не могу найти необходимый файл. ‹br›");

 Response.Write(string.Format("Ошибка: ‹b›{0}‹/b›", Server.GetLastError().Message));

 Server.ClearError();

}

Наконец, отметьте, что перед выходом из этого общего обработчика ошибок с помощью свойства Server явно вызывается метод HttpServerUtility.ClearError(). Это необходимо, чтобы информировать среду выполнения о том, что проблема вами решена, и дальнейшего вмешательства системы не требуется. Если вы забудете сделать это, конечному пользователю будет предъявлено окно среды выполнения с сообщением об ошибке. На рис. 23.19 показан результат выполнения нашей процедуры обработки ошибок.

Рис. 23.19. Обработка ошибок на уровне страницы

В данный момент вы должны чувствовать себя довольно уверенно при работе с типом Page ASP.NET. Имея такую основу, вы теперь готовы перейти к выяснению роли Web-элементов управления ASP.NET.

Исходный код. Файлы примера PageLifeCycle размещены в подкаталоге, соответствующем главе 23.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Событие

Из книги Самоучитель UML автора Леоненков Александр

Событие Термин событие (event) требует отдельного пояснения, поскольку является самостоятельным элементом языка UML. Формально, событие представляет собой спецификацию некоторого факта, имеющего место в пространстве и во времени. Про события говорят, что они «происходят»,


Error: Invalid User Автор: Александр Черняков.

Из книги Домашний компьютер №8 (122) 2006 автора Журнал «Домашний компьютер»

Error: Invalid User Автор: Александр Черняков. © 2003-2006, Издательский дом | http://www.computerra.ru/Журнал «Домашний компьютер» | http://www.homepc.ru/Этот материал Вы всегда сможете найти по его постоянному адресу: /2006/122/284604/Сегодня я взял клавиатуру в руки, чтобы рассказать вам, уважаемые читатели, о


Модуль ERROR

Из книги Давайте создадим компилятор! автора Креншоу Джек


R.16.7 Команда error

Из книги Справочное руководство по C++ автора Страустрап Бьярн

R.16.7 Команда error Строка вида:#error строка-лексемзаставляет реализацию выдать диагностическое сообщение, состоящее из заданной последовательности лексем


Фаза, событие и последовательность

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Фаза, событие и последовательность Триггер может выполняться в одной из двух фаз, связанных с запрошенными изменениями состояния данных: до (before) записи или после (after) нее. Он может применяться к одному из трех событий DML: добавление, изменение или удаление. Начиная с Firebird


Фаза и событие

Из книги UNIX — универсальная среда программирования автора Пайк Роб


3.8.18 error.c

Из книги автора

3.8.18 error.c error(s1, s2) /* print error message and die */ char *s1, *s2;{ extern int errno, sys_nerr; extern char *sys_errlist[], *progname; if (progname)  fprintf(stderr, "%s: ", progname); fprintf(stderr, s1, s2); if (errno > 0 && errno < sys_nerr)  fprintf (stderr, " (%s)", sys_errlist[errno]); fprintf(stderr,