Обработка ошибок ASP.NET с несколькими элементами управления AJAX - PullRequest
1 голос
/ 10 мая 2011

Краткое описание:
У меня проблема, когда при выполнении действия на странице ASPX дважды выдается исключение.

Подробности:
У меня есть два элемента управления ASP.NET (Intersoft Webgrids).Эти элементы управления привязаны к двум разным наборам данных, и когда я нажимаю кнопку «Выполнить», обновляется сетка № 1, которая автоматически каскадно обновляет (или очищает) сетку № 2 одновременно.Эти две сетки обновляются с помощью AJAX Intersoft «FlyPostback», который, похоже, очень похож на панели обновления ASP.NET AJAX, т. Е. Продолжается весь жизненный цикл ASP.NET (Page_Load и все такое).

Всемои страницы наследуются от базовой страницы, которая переопределяет OnError.Затем OnError зарегистрирует ошибку, очистит ее и перенаправит на страницу ошибки.Страница ошибок показывает красиво отформатированный фрагмент подробностей исключений.

Мой метод OnError выглядит примерно так

Session["lastError"] = Server.GetLastError();
Server.ClearError();//Have tried with and without this
this.ErrorPage = "ErrorPage.aspx";
Response.Redirect(this.ErrorPage, true);

Проблема:
Когда возникает исключение после нажатия кнопки «Выполнить»Кнопка Я, кажется, перенаправлен на страницу ошибки дважды.При первом перенаправлении я вижу (через отладчик), что получаю правильное исключение на странице ошибок, но затем меня снова перенаправляют на страницу ошибок, и на этот раз у меня нет подробностей об исключениях.Я не наблюдаю эту проблему только с одной сеткой.Мне кажется, что вторая сетка также пытается обработать исключение, но первая сетка уже обработала и очистила его.

ОБНОВЛЕНИЕ: Кажется, что OnError вызывается только один раз,но страница ошибки загружается дважды.

Вопрос:
Есть ли здесь очевидная ошибка?Есть ли лучший способ справиться с этой ситуацией?Первая сетка должна обработать исключение и прервать все другие запросы (или, по крайней мере, позволить им делать свое дело, не беспокоя меня), но, конечно, сетка № 1 не знает, обновлялась ли сетка № 2.

1 Ответ

0 голосов
/ 11 мая 2011

Я почти уверен, что при использовании Response.Redirect выбрасывается исключение ThreadAbortException:

http://support.microsoft.com/kb/312629

Однако блок перехвата, похожий на этот, также вызывает проблемуесли он у вас есть:

catch (Exception ex)
{
   // log or something
   throw ex;
}

Это поведение удалит детали исключения, поскольку оно маскирует исходное исключение.

Однако, более вероятно, что здесь используется поведение .Redirect.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...