Server.Transfer,Response.Redirect的区别

来源:互联网 发布:mysql忽略大小写 编辑:程序博客网 时间:2024/06/05 03:10
1、Server.Transfer - 用于把处理的控制权从一个页面转移到另一个页面,在转移的过程中,没有离开服务器,内部控件(如:request, session 等)的保存的信息不变,因此,你能从页面 A 跳到页面 B 而不会丢失页面 A 中收集的用户提交信息。如 Request.Form("name"); 此外,在转移的过程中,浏览器的 URL 栏不变。

2、Response.Redirect - 发送一个 HTTP 响应到客户端,告诉客户端跳转到一个新的页面,客户端再发送跳转请求到服务器。使用此方法时,将无法保存所有的内部控件数据,页面 A 跳转到页面 B,页面 B 将无法访问页面 A 中 Form 提交的数据。

3、Page.Navigate - Page.Navigate 实现的功能和 Response.Redirect 差不多,它实际上包括三个步骤:首先调用 Response.Redirect,其次依次卸载所有的控件,最后调用 Response.End。
Response是叫浏览器去重新转向到指定的网页,而Server自然是发生在服务器端为主了,因此会有以下区别:
1. Server.Transfer只能够转跳到本地虚拟目录指定的页面,而Response.Redirect则十分灵活;
2. Server.Transfer可以将页面参数方便传递到指定页面;
3. 使用时,Server.Transfer跳到别的页面后,浏览器显示的地址不会改变,有时反而会造成误会,当然也有些场合需要这样的效果;
4. Server.Transfer可以减少客户端对服务器的请求;
Response.Redirect和Server.Transfer两者都是服务器端转向的工具,但是实现细节有所不同前者页面信息流的方向是:  
服务器->客户端->服务器->客户端
后者页面信息流的方向是:服务器->服务器->客户端
很显然,Server.Transfer少去了第一个从服务器传输数据到浏览器的过程,而是直接从服务器端转向到另一个页面,所以,一般情况下推荐使用这个转向。需要注意的是,Server.Transfer是服务器端转向,所以,浏览器地址栏将显示Server.Transfer语句所在的页面,而不是转向到的页面。使用Response.Redirect则会在浏览器地址栏显示目的页面的URL。
另外,Response.Redirect在本站使用的时候出现了乱码,服务器默认的数据传输编码是GB2312,而本站采用了UTF-8。在使用Response.Redirect的时候,页面并没有按照head标签里边设定的编码格式,而是按照服务器默认方式。使用Server.Transfer就没有这个问题了。
使用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 提交的数据。

(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方法占用资源最多.