Обработка исключений верхнего уровня для (визуальных) веб-частей - PullRequest
1 голос
/ 13 сентября 2010

Я достаточно подробно изучил это и нашел следующее:

  1. Вы можете сделать некоторые хитрые вещи, чтобы перехватить большинство ошибок, внедрив базовый класс, см. Решение Андреаса Кнудсена для этого.
  2. Событие Error в UserControl никогда не запускается, подробности см. Здесь: http://weblogs.asp.net/vga/archive/2003/06/16/8748.aspx

Что я не могу найти, так это какой-либо общий способ отловить ошибки, возникающие в событиях обратной передачи, таких как событие нажатия кнопки, на веб-части или на уровне управления пользователем. Под общим я понимаю то, что могу реализовать в базовом классе.

Я знаю, что я должен делать правильные попытки / ловить в моем коде, но для больших команд я хотел бы быть уверен, что веб-часть никогда не приводит к сбою страницы, но всегда показывает приятное сообщение и позволяет продолжить выполнение для других веб-частей на странице.

Не думаю, что это возможно, но я бы полюбил , чтобы доказать, что он неправ.

Спасибо, Бьорн

1 Ответ

0 голосов
/ 14 сентября 2010

I думаю это возможно, но вы должны обойти тот факт, что когда asp.net распространяет события обратной передачи, его не волнует ваши определения элементов управления пользователя,вместо этого он заботится только об элементах управления, которые явно реализуют IPostBackEventHandler (например, кнопка / выпадающий список и т. д.)

Для страниц, которые можно переопределить и попробовать / перехватить RaisedPostBackEvent, как и для других методов.(Если вы когда-либо хотели стандартную настройку обработки исключений страницы. (Если вы хотите это, то, пожалуйста, пересмотрите. Я потратил слишком много времени в своем последнем проекте, по сути, переопределяя логику обработки исключений asp.net по умолчанию просто для того, чтобы заставить это работать.в деталях)

То, что вы могли бы сделать, - это иметь базовую страницу в вашей системе, от которой наследуются все страницы и которая переопределяет RaisePostBackEvent (source, eventArgs). В этом методе вы можете увидеть, наследует ли источник отваш базовый элемент управления обработкой исключений, или если он содержится в элементе управления, который делает это (перейдите к родительскому графику). Если он содержится в одном элементе, то выполните попытку / перехват вокруг вызова base.Raise .... (см.код в Прозрачная универсальная обработка исключений для asp.net / MOSS2007 (с кодом) ) и вызов метода исключения в случае первого найденного кандидата, если действительно возникнут исключения.

...