Событие 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.