В этот момент вы получаете два вида ошибок:
- Ошибки, генерируемые компилятором.
- Ошибки, генерируемые вашей программой.
Компилятор может выбросить туда любую ошибку , например, он не может найти буквальный элемент управления в коде позади.В этом случае ваша страница даже не существует, и нет способа получить ее в этот момент и выдать это предупреждение JavaScript.
Ошибки, например, во время выполнения вашей программы нулевое исключение, также может остановить отображение страницы, и это также остановит страницу, и у вас не будет там обработчика страницы.
Так что HttpContext.Current.Handler is NOT a page
.
В общем,Application_Error используется для захвата и регистрации unhandled errors
, чтобы решить их позже, и, возможно, показать пользователю лучшую страницу с ошибкой.
Если вы попытаетесь просто увидеть свою ошибку при отладке, вы можете использовать код, подобный следующему:
void Application_Error(object sender, EventArgs e)
{
Exception LastOneError = Server.GetLastError();
if (LastOneError != null)
{
Debug.Fail("Unhandled error: " + LastOneError.ToString());
LogTheError(LastOneError);
}
}
Пользовательская страница ошибки
Единственный способ, которым я могу придумать что-то похожее, - это сделать перенаправление, когда ошибка появляется на новой странице, которая объясняет ошибку - но эточто пользовательская страница ошибок уже делает.
Подробнее
Таким образом я обрабатываю свои пользовательские ошибки и остаюсь на той же странице.Проверка файла состоит в том, чтобы избежать возможного цикла закрытия, который может привести к падению пула.
string cTheFile = HttpContext.Current.Request.Path;
if (!cTheFile.EndsWith("ErrorHandlePage.aspx"))
Server.Transfer("~/ErrorHandlePage.aspx");