使用多个AJAX控件进行ASP.NET错误处理

时间:2011-05-10 09:49:55

标签: asp.net exception-handling

简介:
我有一个问题,当在ASPX页面上执行操作时,会抛出异常两次。

详细说明:
我有两个ASP.NET控件(Intersoft Webgrids)。这些控件绑定到两个不同的数据集,当我按下“运行”按钮时,网格#1被更新,然后自动级联并更新(或清除)网格#2。这两个网格使用Intersoft的“FlyPostback”AJAX进行更新,它似乎与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);

问题:
按下“运行”按钮后发生异常时,我似乎被重定向到错误页面两次。我第一次被重定向时,我可以看到(通过调试器)我在错误页面上得到了正确的异常,但后来我再次被重定向到错误页面,这次我没有异常细节。我没有只用一个webgrid来观察这个问题。在我看来,第二个网格也试图处理异常,但第一个网格已经处理并清除它。

UPDATE:似乎OnError只被调用一次,但错误页面加载了两次。

问题:
这里有明显的错误吗?有没有更好的方法来处理这种情况?第一个网格应该处理异常并中止所有其他请求(或者至少让他们在不打扰我的情况下做他们的事情),但当然网格#1不知道网格#2是否正在更新。

1 个答案:

答案 0 :(得分:0)

我很确定使用Response.Redirect会因设计而抛出ThreadAbortException:

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

但是,如果你有一个类似于此的catch块也会导致问题:

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

该行为将删除异常细节,因为它会掩盖原始异常。

然而,它更有可能是它的.Redirect行为。