2011-05-10 58 views
1

簡要處理:
我有一個ASPX頁面拋出一​​個異常兩次上執行操作時,其中的一個問題。ASP.NET錯誤與多個AJAX控件

詳情:
我有兩個ASP.NET控件(Intersoft Webgrids)。這些控件綁定到兩個不同的數據集,當我按下「運行」按鈕時,網格#1被更新,然後自動級聯和更新(或清除)網格#2。這兩個網格使用Intersoft的「FlyPostback」AJAX進行更新,該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。在我看來,第二個網格也嘗試處理異常,但第一個網格已經處理並清除它。

更新:看起來像OnError只被調用一次,但錯誤頁面加載兩次。

問:
是否有明顯的錯誤嗎?有沒有更好的方法來處理這種情況?第一個網格應該處理異常並中止所有其他請求(或者至少讓他們做他們的事情而不打擾我),但是當然網格#1不知道網格2是否正在更新。

+0

什麼是在第一和第二個例外之間的調用堆棧的區別? – Town 2011-05-10 10:11:52

+0

看起來像OnError只被調用一次,但錯誤頁面加載兩次。 – row1 2011-05-11 01:40:25

回答

0

我敢肯定,使用Response.Redirect的設計拋出一個ThreadAbortException:

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

但是,catch塊類似於這也將導致一個問題,如果你知道了:

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

該行爲將刪除異常詳細信息,因爲它掩蓋了原始異常。

然而,它更可能,其在這裏.Redirect行爲雖然。

+0

我沒有看到任何正在拋出的ThreadAbortExceptions或重新拋出的任何東西(我挑剔了debugging-> Just My Code,所以我可以看到所有東西)。如果我不結束請求,例如Response.Redirect(「ErrorPage.aspx」,false),我仍然有同樣的問題。 – row1 2011-05-11 02:19:57

+0

在Debug菜單中,嘗試進入Exceptions並勾選Common Language Runtime Exceptions旁邊的'Thrown'框;當拋出任何異常時,將會停止該站點,而不管它是否被處理。 – 2011-05-11 08:00:33

+0

該選項已被打勾,如果我不重定向「結束請求」= true,我仍然有問題。 – row1 2011-05-11 08:16:27