ASP.net頁面跳轉方式解析

跳轉頁面asp.net提供的三種方法比較
1 response.redirect 這個跳轉頁面的方法跳轉的速度不快,因爲它要走2個來回(2次postback),但他可以跳轉到任何頁面,沒有站點頁面限制(即可以由雅虎跳到新浪),同時不能跳過登錄保護。但速度慢是其最大缺陷!redirect跳轉機制:首先是發送一個 http請求到客戶端,通知需要跳轉到新頁面,然後客戶端在發送跳轉請求到服務器端。需要注意的是跳轉後內部空間保存的所有數據信息將會丟失,所以需要用到session。
2 server.transfer 速度快,只需要一次postback ,但是。。。。他必須是在同一個站點下,因爲它是server的一個方法。另外,他能跳過登錄保護。你可以寫個小程序試試:設計一個由頁面一到頁面二的跳轉,但要進入到頁面二需要登錄,form認證,但如果跳轉語句使用transfer的話,那就不會彈出登錄頁面了。這個方法的重定向請求是發生在服務器端,所以瀏覽器的url地址仍然保留的是原頁面的地址!
3 sever.execute 這個方法主要是用在頁面設計上面,而且他必須是跳轉同一站點下的頁面。這個方法是需要將一個頁面的輸出結果插入到另一個aspx頁面的時候使用,大部分是在表格中,將某一個頁面類似於嵌套的方式存在於另一頁面。
總結:
當需要把用戶跳轉到另一臺服務器上的頁面的時候 使用redirect
當需要把用戶跳轉到非aspx頁面時候,如html 使用redirect
需要把查詢字符串作爲url一部分的時候保留傳給服務器的時候,因爲其他2種方法不能做到2次postback,把數據先帶回服務器 使用redirect
需要aspx頁面間的轉換(不涉及登錄) 使用transfer
當需要把aspx頁面的輸出結果插入到另一個aspx頁面的時候使用 execute方法。
當然,忘記了還有一個超鏈接!當然這個就不需要講太多了。他是在黨需要用戶來決定什麼時候跳轉頁面,就使用超鏈接。

順便提一下,如何使用redirect方法在查詢字符串中使用漢字,因爲經常的情況是出現亂碼,原因是url不支持漢字。這個時候需要轉換:
string message =server.urlencode("歡迎來到賽跑專欄");
先轉換,在使用查詢字符串
response.redirect("webform2.aspx?msg="+message);
asp.net實現從一個頁面跳轉到另一頁面方法的比較
實現頁面跳轉的方法很多,除了服務器控件是asp.net封裝過外,其它在asp中也就有了。
這麼多實現方法中,都是實現同樣的功能,爲什麼還要支持如此多的方法呢,我們實際應用
中到底應該選擇哪一種方法呢?也許我們大多數人都是需要用跳轉時,隨便想到一個便拿來用,
從不去考慮它們會有不同,其實之前我也是這樣的,對他們沒有一個系統的瞭解是不能發揮它
們各自的優勢的。好,現在讓我們來了解一下它們各自的用途吧
一、超鍵接
這就不說了,最簡單的。
二、服務器控件
HyperLink
通過NavigateUrl屬性來指定要跳轉的url。
主要用於由用戶來決定何時轉換頁面,但是用程序來控制轉換的目標。
三、程序控制
1、Response.Redirect()
服務器--------》通知客戶端----------》請求跳轉到服務器端
主要用於需要將查詢字符串作爲url的一部分傳遞給另一頁面,或跳轉的頁面是html頁面
2、Server.Transfer()
使用此方法最大的特點是url仍然是跳轉前的頁面的url。
主要用於需要將執行流程轉到同一web服務器的另一aspx頁面時用。因爲它在跳轉後保留了
request和session值,並且可以使用跳轉前頁面的數據。
3、Server.Execute()
此方法執行完後程序控制權會返回到跳轉代碼的下一代碼,相當於我們的模態窗口,此時可以得到
跳轉過頁面的返回值。
常 用於輔助選擇操作,然後返回選擇後的值到當前頁面。
有了上面的介紹,我們就應該選擇適當的時候用不同的跳轉方法。
asp.net網頁中的四種頁面跳轉技術的比較
在asp.net中有四種頁面跳轉導航方式,該如何爲你的頁面選擇一個呢?
·如果要讓用戶來決定何時轉換頁面以及轉到哪一個頁面,超級鏈接最適合。
·如果要用程序來控制轉換的目標,但轉換的時機由用戶決定,使用Web服務器的HyperLink控件,動態設置其NavigateUrl屬性。
·如果要把用戶連接到另一臺服務器上的資源,使用Response.Redirect。
·用Response.Redirect把用戶連接到非ASPX的資源,例如HTML頁面。
·如果要將查詢字符串作爲URL的一部分保留,使用Response.Redirect。
·如果要將執行流程轉入同一Web服務器的另一個ASPX頁面,應當使用Server.Transfer而不是Response.Redirect,因爲Server.Transfer能夠避免不必要的網絡通信,從而獲得更好的性能和瀏覽效果。
·如果要捕獲一個ASPX頁面的輸出結果,然後將結果插入另一個ASPX頁面的特定位置,則使用Server.Execute。
·如果要確保HTML輸出合法,請使用Response.Redirect,不要使用Server.Transfer或Server.Execute方法。

關於Server.Execute,
這種頁面導航方式類似於針對ASPX頁面的一次函數調用,被調用的頁面能夠訪問發出調用頁面的表單數據和查詢字符串集合,所以要把被調用頁面Page指令的EnableViewStateMac屬性設置成False。
默認情況下,被調用頁面的輸出追加到當前應答流。但是,Server.Execute方法有一個重載的方法,允許通過一個TextWriter對象(或者它的子對象,例如StringWriter對象)獲取被調用頁面的輸出,而不是直接追加到輸出流,這樣,在原始頁面中可以方便地調整被調用頁面輸出結果的位置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章