程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Server.Transfer替代Response.Redirect的合理用法--微軟的建議(downmoon)

Server.Transfer替代Response.Redirect的合理用法--微軟的建議(downmoon)

編輯:.NET實例教程
在.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)



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved