简介:
我有一个问题,当在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是否正在更新。
答案 0 :(得分:0)
我很确定使用Response.Redirect会因设计而抛出ThreadAbortException:
http://support.microsoft.com/kb/312629
但是,如果你有一个类似于此的catch块也会导致问题:
catch (Exception ex)
{
// log or something
throw ex;
}
该行为将删除异常细节,因为它会掩盖原始异常。
然而,它更有可能是它的.Redirect行为。