使用HttpContext.RewritePath來配合Server.Transfer/Execute
我想由不少人都懂得在Applicaton_Start等事件中使用HttpContext.RewritePath來改變HttpHandler。
如果在Server.Transfer/Execute的調用前,使用RewritePath,更可以起到指定QueryString的效果。
例如
Context.RewritePath("AA.Aspx","","OKOK=3333");
Context.Server.Transfer("Test2.Aspx");
這樣,就能執行Test2.Aspx,并且QueryString是OKOK=3333。
這個用途特別大。我目前用這個方法來避免使用Response.Redirect。
Server.Transfer,Response.Redirect的區別
Server.Transfer(ASP 3.0 以上) 和 Response.Redirect 在以前的 ASP 中就存在了,Page.Navigate 是 ASP.NET Beta 1 提供的新功能,它們之間的區別在于:
1、Server.Transfer - 用于把處理的控制權從一個頁面轉移到另一個頁面,在轉移的過程中,沒有離開服務器,內部控件(如:request, session 等)的保存的信息不變,因此,你能從頁面 A 跳到頁面 B 而不會丟失頁面 A 中收集的用戶提交信息。此外,在轉移的過程中,瀏覽器的 URL 欄不變。
2、Response.Redirect - 發送一個 HTTP 響應到客戶端,告訴客戶端跳轉到一個新的頁面,客戶端再發送跳轉請求到服務器。使用此方法時,將無法保存所有的內部控件數據,頁面 A 跳轉到頁面 B,頁面 B 將無法訪問頁面 A 中 Form 提交的數據。
3、Page.Navigate - Page.Navigate 實現的功能和 Response.Redirect 差不多,它實際上包括三個步驟:首先調用 Response.Redirect,其次依次卸載所有的控件,最后調用 Response.End。
特別要注意的是:在 .NET Beta 2 中,Microsoft 將不再包括 Page.Navigate 這個功能,大家應該現在就用 Response.Redirect 來代替 Page.Navigate,以節省將來升級時的時間。
(1)Server.Transfer方法:
Server.Transfer("m2.aspx");//頁面轉向(服務器上執行).
服務器停止解析本頁,保存此頁轉向前的數據后,再使頁面轉向到m2.aspx,
并將轉向前數據加上m2.aspx頁結果返回給瀏覽器.
(2)Server.Execute方法:
Server.Execute("m2.aspx");
服務器保存此頁轉向前的數據后,使頁面轉向到m2.aspx執行,
再返回本頁繼續執行.再將三者結果合并后返回給瀏覽器.
以上都是服務器端頁面轉向所以瀏覽器不出現頁更改記錄(顯示的地址不會改變).
因此,如果用戶刷新此頁,也許會出現一些其它意外情況.
此類頁轉向,可完成一些其它功能,比如訪問到前一頁面中的服務端控件.
(3)Response.Redirect:
當瀏覽器請求aspx頁面時,碰到Redirect(url)方法,
相當于告訴瀏覽器,你先需訪問某頁面,于是瀏覽器再向服務器發送一個到此頁面的請求.
重定位是通過瀏覽器執行的,在服務器和瀏覽器之間會產生額外的往返過程。
在網絡狀況不是很好的情況下,兩次請求會大大的
降低應用程序的反應速度,甚至占用多余的帶寬.
總結:
在網絡狀態較好的情況下,Redirect(url)方法效率最高!!
Server.Transfer方法和Server.Execute方法最靈活!!
Server.Execute方法占用資源最多.
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com