try { Response.Redirect("~/Message/MSG.aspx?msg=個人資料更新成功&pt=1",true); } catch { Response.Redirect("~/Message/MSG.aspx?msg=個人資料更新失敗&pt=0"); }
try { Response.Redirect("~/Message/MSG.aspx?msg=個人資料更新成功&pt=1",true); } catch { Response.Redirect("~/Message/MSG.aspx?msg=個人資料更新失敗&pt=0"); }
使用以上語句,不管是否有異常,都會執(zhí)行catch中的,一直顯示"失敗",原因如下:
原因 Response.End 方法停止頁的執(zhí)行,并將該執(zhí)行變換到應(yīng)用程序的事件管線中的 Application_EndRequest 事件。 Response.End 后面的代碼行將不執(zhí)行。
此問題出現(xiàn)在 Response.Redirect 和 Server.Transfer 方法中,這是由于這兩種方法都在內(nèi)部調(diào)用 Response.End。 解決方案 若要解決此問題,請使用下列方法之一: 對于 Response.End,調(diào)用 ApplicationInstance.CompleteRequest 方法而不調(diào)用 Response.End,以便跳過 Application_EndRequest 事件的代碼執(zhí)行。 對于 Response.Redirect,使用重載 Response.Redirect(String url, bool endResponse),對 endResponse 參數(shù)它傳遞 false以取消對 Response.End 的內(nèi)部調(diào)用。例如: Response.Redirect ("nextpage.aspx", false);如果使用這種解決方法,Response.Redirect 后面的代碼將得到執(zhí)行。 對于 Server.Transfer,請改用 Server.Execute 方法。 狀態(tài) 這種現(xiàn)象是設(shè)計使然。 解決后的代碼: try { Response.Redirect("~/Message/MSG.aspx?msg=個人資料更新成功&pt=1",false); } catch { Response.Redirect("~/Message/MSG.aspx?msg=個人資料更新失敗&pt=0"); }
|