一、Redirect和Transfer
在ASP.NET中,我想很多人在重定向页面的时候都是用Response.Redirect("test.aspx");而在MSDN的教程中也是如此。现在就了解一下在调用Redirect()时到底做了什么?!
当调用Redirect()时,服务端会给客户端的浏览器发个消息告诉它“我现在要转到其它页面了”,浏览器收到消息(请求)后,马上服从命令,给服务器返回一个确认消息,请求服务器把当前这个页面定位到新页面。
Server 发送请求 > Client 收到信息确认返回 > Server 请求重定向 > test.aspx
由此看出,仅仅重定向一个新页面,就在后台做了此许多事,来来回回的两次Server动作,为什么要这么麻烦呢,这样做效率又低,又占网络资源(当网络慢时会显得更加慢,此时对于不是必需看的信息我会毫不犹豫地close掉 (^_^) ) 。为什么不直接在Server端进行重定向动作呢。很荣幸,MS提供了个Server.Transfer("test.aspx"),它的一切动作都在Server端进行,所以相对而言,它的重定向速度比前都要快得多。它有两个参数,一个为重定向页面,一个为布尔值(用来指定是否保存原页面表单的信息)。它仅仅在重定向的时候带了一个状态信息,也就是用ViewState保存了重定向前的页面的信息.因此可以把它理解为一个“假象”,也就是页面上显示的是重定向后的页面,但原来页面的信息却还在ViewState(查看源代码时,有时会看到一堆密密麻麻的字符,就是它了)。
可以这样在新页面中取得原页面中某个文本框的值:
Server.Transfer(
"
test.aspx
"
,
true
);
Request.Form(
"
UserName
"
);
//
此处的UserName为文本框的id.
世界没有完美的东西:
1. Server.Transfer(),只能重定向到网站本身的页面,无法重定向到其它网站,而Redirect则可以,如Response.Redirect( http://www.cnblogs.com")
2.在使用了Transfer的第二个可选参数后,执行的时候可能会报出“无效的ViewState..."这样的错误,解决方法参见: http://support.microsoft.com/default.aspx?id=kb;en-us;Q316920
二、Transfer和Execute
在ASP时代有这么个东东Server.Execute(),也用来重定向页面,这个东东我看很多web开发人员都不再用了吧(^_^),它的作用只是执行完新页面的结果后又返回到原页面,如下:
页面1 Server.Execute("页面2") > 返回页面2的结果 ,再返回到页面1,最终页面是停留在页面1,而不是在页面2.
以上主要是对Redirect和Transfer用法和效率的讨论。
By Jabby随手小记
2005年4月18日23:03:36
在ASP.NET中,我想很多人在重定向页面的时候都是用Response.Redirect("test.aspx");而在MSDN的教程中也是如此。现在就了解一下在调用Redirect()时到底做了什么?!
当调用Redirect()时,服务端会给客户端的浏览器发个消息告诉它“我现在要转到其它页面了”,浏览器收到消息(请求)后,马上服从命令,给服务器返回一个确认消息,请求服务器把当前这个页面定位到新页面。
Server 发送请求 > Client 收到信息确认返回 > Server 请求重定向 > test.aspx
由此看出,仅仅重定向一个新页面,就在后台做了此许多事,来来回回的两次Server动作,为什么要这么麻烦呢,这样做效率又低,又占网络资源(当网络慢时会显得更加慢,此时对于不是必需看的信息我会毫不犹豫地close掉 (^_^) ) 。为什么不直接在Server端进行重定向动作呢。很荣幸,MS提供了个Server.Transfer("test.aspx"),它的一切动作都在Server端进行,所以相对而言,它的重定向速度比前都要快得多。它有两个参数,一个为重定向页面,一个为布尔值(用来指定是否保存原页面表单的信息)。它仅仅在重定向的时候带了一个状态信息,也就是用ViewState保存了重定向前的页面的信息.因此可以把它理解为一个“假象”,也就是页面上显示的是重定向后的页面,但原来页面的信息却还在ViewState(查看源代码时,有时会看到一堆密密麻麻的字符,就是它了)。
可以这样在新页面中取得原页面中某个文本框的值:
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
世界没有完美的东西:
1. Server.Transfer(),只能重定向到网站本身的页面,无法重定向到其它网站,而Redirect则可以,如Response.Redirect( http://www.cnblogs.com")
2.在使用了Transfer的第二个可选参数后,执行的时候可能会报出“无效的ViewState..."这样的错误,解决方法参见: http://support.microsoft.com/default.aspx?id=kb;en-us;Q316920
二、Transfer和Execute
在ASP时代有这么个东东Server.Execute(),也用来重定向页面,这个东东我看很多web开发人员都不再用了吧(^_^),它的作用只是执行完新页面的结果后又返回到原页面,如下:
页面1 Server.Execute("页面2") > 返回页面2的结果 ,再返回到页面1,最终页面是停留在页面1,而不是在页面2.
以上主要是对Redirect和Transfer用法和效率的讨论。
By Jabby随手小记
2005年4月18日23:03:36