Server.Transfer和Response.Redirect 区别

大多数人使用 Response.Redirect 将用户引导到另一个页面,而另一些人好像偏爱于神秘的 Server.Transfer,那么,这二者有什么区别?

Response.Redirect 简单地发送一条消息到浏览器,告诉浏览器定位到另一个页面。你可以使用下面的代码将用户引导到另一个页面:Response.Redirect("WebForm2.aspx")或者Response.Redirect("http://www.163.com/")

Server.Transfer 也是通过一条语句将用户引导到另一页面,比如:Server.Transfer("WebForm2.aspx")。不过,这条语句有一系列独特的优缺点。

首先,通过 Server.Transfer 引导到另一页面保留服务器资源,通过更改服务器端“焦点”和传输请求来代替告诉浏览器重定向,这就意味着你不会占用较多的 HTTP 请求,因此这可以减轻服务器的压力,使你的服务器运行更快。

不过,请注意,由于 "transfer" 只能在同一服务器端的同一站点间运行,所以你不能用 Server.Transfer 将用户重定向到另一服务器上的站点。要重定向到服务器以外的站点,只有 Response.Redirect 能办到。

其次,Server.Transfer 保留浏览器端的 URL 地址。这对流线型的数据输入很有帮助,不过这也增加了调试的复杂度。

还有:Server.Transfer 方法还有另一个参数——"preserveForm"。如果你设置这个参数为 True,比如:Server.Transfer("WebForm2.aspx", True), 那么 query string 和任何 form 变量都会同时传递到你定位的页面。

例:WebForm1.aspx 有一个文本框名为 TextBox1,你利用 preserveForm 为 True 传递到 WebForm2.aspx,你仍然可以用 Request.Form("TextBox1") 来取得文本框的值。

这种技术对向导式的多页面输入很有用.

总结:Response.Redirect 简单地告诉浏览器访问另一个页面。Server.Transfer 有利于减少服务器请求,保持地址栏 URL 不变,允许你将 query string 和 form 变量传递到另一个页面。

(以上是摘自网上的资料)
另外表单Post的提交方式在Response.Redirect下是没有用的.

在使用Server.Transfer时还可以通过Context来传值.比如在webform1里添加一个context的item:

this.Context.Items.Add("test", "abcdef");

那么就可以在webform2里能过下列代码得到这个item值

this.Context.Items["test"].ToString()

我记得在VS 2003里还可以在Server.Transfer下通过this.Context.Handler来获得webform1页面类的一个实例,从而可以访问里面对象,属性等.但在VS 2005里好像没办法获得webform1的页面类.请哪位高人指点一下.

VS 2003是可以这样申请一个webForm1的实例的:

在webform2里

WebForm1 form1=(WebForm1)this.Context.Handler;

好象还是可以直接New 一个的:webform1 form1=new webform1();

不知道VS 2005里不可以了.可以是基于安全的吧.

你可能感兴趣的:(response)