優點
一它在服務器端直接重定向不用像responseRedirect一樣先與浏覽器通信再重定向效率高
二它可以傳遞上一個頁面的提交值比如A頁面提交值到B頁面B頁面Transfer到C頁面C頁面同樣可以收到A頁面提交的值
三可以隱藏url
缺點
不能刷新頁面比如A頁面提交登錄信息到B頁面B頁面處理後Transfer再到AA頁面得不到刷新指定了過期也不行如果AB頁面不在同一個目錄下我們還會發現更多意想不到的結果使用相對鏈接的圖片超鏈接的指向都改變了造成這種原因是B頁面讀取A頁面內容卻以B頁面的身份輸出所以路徑改變了
在中有四種頁面跳轉導航方式該如何為你的頁面選擇一個呢?
·如果要讓用戶來決定何時轉換頁面以及轉到哪一個頁面超級鏈接最適合
·如果要用程序來控制轉換的目標但轉換的時機由用戶決定使用Web服務器的HyperLink控件動態設置其NavigateUrl屬性
·如果要把用戶連接到另一台服務器上的資源使用ResponseRedirect
·用ResponseRedirect把用戶連接到非ASPX的資源例如HTML頁面
·如果要將查詢字符串作為URL的一部分保留使用ResponseRedirect
·如果要將執行流程轉入同一Web服務器的另一個ASPX頁面應當使用ServerTransfer而不是ResponseRedirect因為ServerTransfer能夠避免不必要的網絡通信從而獲得更好的性能和浏覽效果
·如果要捕獲一個ASPX頁面的輸出結果然後將結果插入另一個ASPX頁面的特定位置則使用ServerExecute
·如果要確保HTML輸出合法請使用ResponseRedirect不要使用ServerTransfer或ServerExecute方法
關於ServerExecute
這種頁面導航方式類似於針對ASPX頁面的一次函數調用被調用的頁面能夠訪問發出調用頁面的表單數據和查詢字符串集合所以要把被調用頁面Page指令的EnableViewStateMac屬性設置成False
默認情況下被調用頁面的輸出追加到當前應答流但是ServerExecute方法有一個重載的方法允許通過一個TextWriter對象(或者它的子對象例如StringWriter對象)獲取被調用頁面的輸出而不是直接追加到輸出流這樣在原始頁面中可以方便地調整被調用頁面輸出結果的位置
跳轉頁面提供的三種方法比較
今天老師講了三種跳轉頁面的方法現在總結如下
responseredirect 這個跳轉頁面的方法跳轉的速度不快因為它要走個來回(次postback)但他可以跳 轉到任何頁面沒有站點頁面限制(即可以由雅虎跳到新浪)同時不能跳過登錄保護但速度慢是其最大缺陷!redirect跳轉機制首先是發送一個http請求到客戶端通知需要跳轉到新頁面然後客戶端在發送跳轉請求到服務器端需要注意的是跳轉後內部空間保存的所有數據信息將會丟失所以需要用到session
servertransfer 速度快只需要一次postback 但是他必須是在同一個站點下因為它是server的一個方法另外他能跳過登錄保護你可以寫個小程序試試設計一個由頁面一到頁面二的跳轉但要進入到頁面二需要登錄form認證但如果跳轉語句使用transfer的話那就不會彈出登錄頁面了這個方法的重定向請求是發生在服務器端所以浏覽器的url地址仍然保留的是原頁面的地址!
severexecute 這個方法主要是用在頁面設計上面而且他必須是跳轉同一站點下的頁面這個方法是需要將一個頁面的輸出結果插入到另一個aspx頁面的時候使用大部分是在表格中將某一個頁面類似於嵌套的方式存在於另一頁面
總結
當需要把用戶跳轉到另一台服務器上的頁面的時候 使用redirect
當需要把用戶跳轉到非aspx頁面時候如html 使用redirect
需要把查詢字符串作為url一部分的時候保留傳給服務器的時候因為其他種方法不能做到次postback
把數據先帶回服務器 使用redirect
需要aspx頁面間的轉換(不涉及登錄) 使用transfer
當需要把aspx頁面的輸出結果插入到另一個aspx頁面的時候使用 execute方法
當然忘記了還有一個超鏈接!當然這個就不需要講太多了他是在黨需要用戶來決定什麼時候跳轉頁面就使用超鏈接
順便提一下如何使用redirect方法在查詢字符串中使用漢字因為經常的情況是出現亂碼原因是url不支持漢字這個時候需要轉換
string message =serverurlencode(歡迎來到賽跑專欄);
先轉換在使用查詢字符串
responseredirect(webformaspx?msg=+message);
首先 ResponseRedirect(aaspx)在保存此頁的數據後服務器將頁面直接轉向到aaspx 此方法有個缺陷就是轉向後會丟失此頁所有的Request的參數並且此方法是需要Client發起一個請求
在IIS 中引入了一個新的函數 ServerTransfer(aaspx)它很好地解決了轉向後丟失此頁Request參數的問題並且由於它是從server端直接向下一頁發起請求所以不需要client再次發送請求它與ResponseRedirect的區別在於ResponseRedirect可以轉向任何一個頁面而ServerTransfer只能轉向同目錄或子目錄的網頁ResponseRedirect轉向時地址會變成跳轉後的頁面地址而ServerTransfer轉向時原地址不變並且傳遞的參數值也被隱藏
另一個方法是ServerExecute(aaspx)它和ServerTransfer功能類似主要的區別在於serverexecute在轉向aaspx執行完成後還會返回原來的頁面繼續處理
From:http://tw.wingwit.com/Article/program/net/201311/11271.html