[ASP.NET] 在AJAX,開新視窗與重新導向網頁的並行使用

摘要:在AJAX內,開新視窗與重新導向網頁的並行使用

若要使用開新視窗(JavaScript函式)與網頁重新導向兩者並行的需求
直覺的寫法:

Response.Write("<script >window.open('NewPage.aspx');</script>");
Response.Redirect("MyPage.aspx");

而以上code會發現Js的開新視窗無效了!
原因出在JavaScript需要在返回Client端才能執行
而此行Response.Redirect("MyPage.aspx");
將網頁返回Client前,頁面已導向MyPage.aspx

 

其一解決方法為 「全部使用Java Script實現」
範例如下:

Response.Write("<script>window.open('NewPage.aspx'); location.href='MyPage.aspx'</script>");

(Java Script重新導向網頁的方法可參考保哥寫的這篇: 細談 location.href 與 location.replace 的差別與實務應用 )

 

 

若是今天有使用AJAX之UpdatePanel製作非同步網頁的話
Js必須使用ScriptManager的RegisterClientScriptBlock註冊Js語法即可執行
ScriptManager.RegisterClientScriptBlock用法可參考這篇:於AJAX.NET中使用Javascript的Alert功能

 

 

結論:
綜合以上,若要在AJAX裡面使用Js語法,並重新導向網頁不影響Js的執行
可寫成: (in UpdatePanel)

ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "test", "window.open('NewPage.aspx'); location.href='MyPage.aspx';", true);

 

PS: ASP.Net重導向網頁另一個用法為Server.Transfer()
但是它跟AJAX並用會產生例外:PageRequestManagerParserErrorException Error
詳情可見In91大的這篇[AJAX.NET]使用UpdatePanel出現PageRequestManagerParserErrorException Error


原參考網址:威筆記: Alert視窗確認後Response.Redirect轉跳頁面的替代方法(含ScriptManager Ajax頁面轉跳方法)

 

以上皆為隨筆心得,歡迎各方大大指教 謝謝!

--

不斷學習,精進自我

Herbert Fang