您的位置:首页 > Web前端

再谈Server.Transfer,Response.Redirect的区别

2009-03-12 22:10 323 查看
使用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方法占用资源最多.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: