在.Net頁面(如Test2.aspx)完成頁面事件後,常常需要跳轉到另外一個頁面(如test1.ASPx)去。最常見的用法是:
Page.Response.Redirect("test1.ASPx");
而按照微軟的建議,該寫法應該改成:
Server.Transfer("test1.ASPx");
於是,更常見的一個錯誤出現了:
”執行Server.Transfer時提示執行子請求時出錯“(中文版)
”ThreadAbortException“(英文版)
該問題的出現原因如下:
Response.End 方法終止頁的執行,並將此執行切換到應用程序的事件管線中的 Application_EndRequest 事件。不執行 Response.End 後面的代碼行。
此問題出現在 Response.Redirect 和 Server.Transfer 方法中,因為這兩種方法均在內部調用 Response.End。解決方案:
1、 對於 Response.End,調用 HttpContext.Current.ApplicationInstance.CompleteRequest 方法而不是 Response.End 以跳過 Application_EndRequest 事件的代碼執行。
2、 對於 Response.Redirect,請使用重載
Response.Redirect(String url, bool endResponse),
該重載對 endResponse 參數傳遞 false 以取消對 Response.End 的內部調用。例 如: Response.Redirect ("nextpage.ASPx", false);
如果使用此替代方法,將執行 Response.Redirect 後面的代碼。
3、對於 Server.Transfer,請改用 Server.Execute 或HttpServerUtility.Execute方法。關於Server.Execute方法,請參考微軟網站
使用 Server.Execute 方法
HttpServerUtility.Execute 方法 (String)
HttpServerUtility.Execute 方法 (String, TextWriter)