У меня есть собственный класс обработчика ошибок:

namespace AccountCenterUserControls
{
    public class EWHErrorModule : IHttpModule
    {
        public void Init(HttpApplication app)
        {
            app.Error += new System.EventHandler(OnError);
        }

        public void OnError(object obj, EventArgs args)
        {
            Page myPage = (System.Web.UI.Page)HttpContext.Current.Handler;

            ctx.Server.ClearError();
        }

        public void Dispose() { }
    }
}

Я создал этот обработчик ошибок в своем файле web.config следующим образом:

<httpModules>
        <!-- EWH Custom Error Handler -->
        <add type="AccountCenterUserControls.EWHErrorModule" name="EWHErrorModule"/>
</httpModules>

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

2
Ben Liyanage 4 Мар 2011 в 02:42
2
Вы бы рассмотрели возможность использования ELMAH?
 – 
adt
4 Мар 2011 в 02:44
Простой способ... перенаправление, например: /…
 – 
Jamie Treworgy
4 Мар 2011 в 02:49
Я согласен с использованием ELMAH, однако я хочу отображать собственное сообщение об ошибке в зависимости от исключения, которое я перехватываю. В другом месте в моем приложении я иногда буду предлагать значимые исключения, такие как отказ в доступе или что-то еще.
 – 
Ben Liyanage
4 Мар 2011 в 02:53

1 ответ

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

Я надеюсь, что мои предположения о вашей ситуации верны. Если они верны, мне было интересно, почему вы просто не реализуете Application_Error в Global.asax/.cs? Это будет автоматически связано с событием OnError приложения ASP.NET. Внутри этого обработчика у вас будут ссылки, доступные для запроса, ответа и сеанса.

Кроме того, вы должны знать, что HttpContext.Current.Handler может и будет возвращать значение null на определенных этапах жизненного цикла. Например, ошибка произошла до того, как запрос был передан обработчику, как во время запроса аутентификации.

0
justin 6 Мар 2011 в 21:49
Я использую umbraco как часть своего проекта, и в результате у меня нет доступа к файлу global.cs.
 – 
Ben Liyanage
6 Авг 2011 в 01:08