惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
博客园 - Franky
罗磊的独立博客
G
Google Developers Blog
The GitHub Blog
The GitHub Blog
P
Proofpoint News Feed
Recent Announcements
Recent Announcements
V
V2EX
F
Fortinet All Blogs
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
月光博客
月光博客
U
Unit 42
GbyAI
GbyAI
A
About on SuperTechFans
WordPress大学
WordPress大学
Engineering at Meta
Engineering at Meta
雷峰网
雷峰网
Microsoft Azure Blog
Microsoft Azure Blog
Martin Fowler
Martin Fowler
D
DataBreaches.Net
The Cloudflare Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MongoDB | Blog
MongoDB | Blog

博客园 - 荆棘鸟

FSO查看文件夹 鼠标事件 《《未完》》 不间断往上滚动 超酷的日历[经典] 右下角弹出提示的代码!!!经典 屏蔽源码 效果怎么样 一个类似于QQ菜单的导航[经典] 滑出式菜单导航栏 js翻页代码集合 [经典] 一个JS的翻页效果(翻书效果) sql常用语句 菜鸟的最爱 .NET经典代码汇总(五) 菜鸟的最爱 .NET经典代码汇总(四) 菜鸟的最爱 .NET经典代码汇总(三) 菜鸟的最爱 .NET经典代码汇总(二) 菜鸟的最爱 .NET经典代码汇总(一) 值传递 .net下使用cookies
Server.Transfer与Response.Redirect页面跳转方法的区别,总...
荆棘鸟 · 2007-11-01 · via 博客园 - 荆棘鸟

Posted on 2007-11-01 10:39  荆棘鸟  阅读(471)  评论()    收藏  举报

       在实现页面跳转的时候,有些人喜欢用Response.Redirect,而有些人则喜欢用Server.Transfer。大部分时间似乎这两种方法都可以实现相同的功能,那究竟有区别吗?

        查了些文档,发现两者区别还是很明显的。根本上,Response是叫浏览器去重新转向到指定的网页,而Server自然是发生在服务器端为主了,因此会有以下区别:

1. Server.Transfer只能够转跳到本地虚拟目录指定的页面,而Response.Redirect则十分灵活;
2. Server.Transfer可以将页面参数方便传递到指定页面;
3. 使用时,Server.Transfer跳到别的页面后,浏览器显示的地址不会改变,有时反而会造成误会,当然也有些场合需要这样的效果;
4. Server.Transfer可以减少客户端对服务器的请求


Server.Transfer只能是具体的页面,不能添加url参数。但页面内变量可以保持传递。

Server.Transfer跳转页面的状态与Response.Redirect类似。
但是它们之间还是有一些差别的。

首先,用Server.Transfer迁移到另一个页面保持着服务资源。
而不是简单的通知浏览器服务端换了个页面并迁移请求。这
意味着你不需要携带更多的Http请求,因此可以减轻服务端的
压力而使你的应用运行得更快。

但是,注意:因为"Transfer"过程只能在那些在同一服务端的
站点上,你不能使用Server.Transfer使用户跳转到外部的站点。
这点只有Response.Redirect能做到。

第二,Server.Transfer维持着浏览器原始的URL,这对于流线
型的数据入口技术,虽然它有可能导致调试的时候的数据混乱

还有,Server.Transfer方法还有二个参数的重载方法——
"preserveForm"如果你将其设置为True(默认情况是False),
使用一个状态比如:Server.Transfer("WebForm2.aspx", True),
现存的请求字符串和所有的Form里的变量将被保持并提交到你的
目标页。

但是必须注意的是,这里有一个奇怪的Bug(微软为什么有这样
的Bug)。当你使用两个参数的重载方法试图迁移form和请求字符
串的时候会有可能产生错误。

非官方的解决办法是将要被跳转的画面的enableViewStateMac
的属性设置为 True , 然后再设回 False.