在ASP.NET中,在后台传值方式目前大多都是用 Response.Redirect("页面地址") 来重定向页面的,但是现在还有一种方式也可以达到重定向页面的作用,而且在某些时刻会起到一种很棒的效果,那就是使用 Server.Transfer("页面地址") 来重定向地址。

现在我们来详细了解一下这两种重定向页面地址的用法和区别:

Response.Redirect :Response.Redirect 会将地址输出至浏览器,执行重定向操作。但是请注意,在程序执行到Response.Redirect("页面地址") 语句时,会立即中断当前页面的生命周期,直接向客户端返回信息,让客户端进行重定向操作。这个时候页面URL将会显示重定向后的地址。

Server.Transfer :Server.Transfer 是一个很奇特的方法。当使用 Server.Transfer 方法重定向页面时,虽然页面也会被重定向至指定页,但是并不会在浏览器的URL上体现出来,并且若重定向的页面后有参数,也不会显示在浏览器的URL上。

举一个例子: 有 index1.aspx 和index2.aspx 两个页面,在 index1.aspx 的后台 index1.aspx.cs 中使用 Server.Transfer重定向页面至 index2.aspx 页面,

protected void Page_Load(object sender, EventArgs e) { Server.Transfer("index2.aspx?name=Tom"); }

在index2.aspx.cs代码中接收并显示传来的值,

protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { string name = Request.QueryString["name"]; Response.Write(name); } }

设置index1.aspx页面为起始页,运行程序,我们会发现,在页面为index1.aspx页面上输出了Tom。

事实上,传统的 Response.Redirect 会在程序运行至该语句时,强制中断该页面的生命周期,重定向至新的指定页面上去。而 Server.Transfer 并不会终止该页面,而是将当前页面响应的输出流终止,然后重新定位请求至index2.aspx页面,也就是说,在index1.aspx这个页面的响应流并没有终止的情况下,它去请求index2.aspx页面,然后将index2.aspx页面操作的结果响应给客户。

Server.Transfer优缺点:Server.Transfer因为浏览器URL上并没有看到有重定向痕迹,因此并不会占用较多的 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") 来取得文本框的值。 
这种技术对向导式的多页面输入很有用,不过这里有一个你必须注意的问题是,当你使用 preserveForm 参数时,ASP.NET 有一个 bug,通常情况下,当试图传递 form 或 query string 值时会发生错误。非官方的解决办法是在你要传递的目的页面中设置 enableViewStateMac 属性为 True,然后再将其设置回 False。这说明你需要使用 enableViewStateMac 的 False 值才能解决这个问题。 
总结:Response.Redirect 简单地告诉浏览器访问另一个页面。Server.Transfer 有利于减少服务器请求,保持地址栏 URL 不变,允许你将 query string 和 form 变量传递到另一个页面(有一点小小的缺陷)。

Server.Transfer 和 Response.Redirect 的用法相关推荐

  1. Server.Transfer VS Response.Redirect

    如果你读过很多行业杂志和 ASP.NET 示例,你会发现,大多数人使用 Response.Redirect 将用户引导到另一个页面,而另一些人好像偏爱于神秘的 Server.Transfer,那么,这 ...

  2. Server.Transfer()與Response.Redirect()的區別

    Server.Transfer():用于把處理的控制權從一個頁面轉移到另一個頁面,在轉移到過程中,沒有離開服務器,內部控件(如:request,session等)保存的信息不變,因此,你能從頁面A跳轉 ...

  3. Server.Transfer 和Response.Redirect 比较

    作者:卡尔·穆尔 原著:Developer.com 翻译:陈梦 如果你读过很多行业杂志和 ASP.NET 示例,你会发现,大多数人使用 Response.Redirect 将用户引导到另一个页面,而另 ...

  4. Response.Redirect ,Server.Transfer ,Server.Execute, 的区别(比较)

    1.Response.Redirect(): Response.Redirect方法导致浏览器链接到一个指定的URL.当Response.Redirect()方法被调用时,它会创建一个应答,应答头中指 ...

  5. Response.Redirect(),Server.Transfer(),Server.Execute()的区别与网站优化

    1.Response.Redirect(): Response.Redirect方法导致浏览器链接到一个指定的URL.当Response.Redirect()方法被调用时,它会创建一个应答,应答头中指 ...

  6. Response.Redirect、 Server.Transfer、Server.Execute三者区别

    (1)Response.Redirect简单地发送一条消息到浏览器,告诉浏览器定位到另一个页面.client->server->client->server->client ( ...

  7. Response.Redirect ,Server.Excute和Server.Transfer区别详解

    Response.Redirect 简单地发送一条消息到浏览器,告诉浏览器定位到另一个页面.你可以使用下面的代码将用户引导到另一个页面: Response.Redirect("WebForm ...

  8. Response.Redirect(),Server.Transfer(),Server.Execute()的区别

    Response.Redirect(),Server.Transfer(),Server.Execute()的区别 1.Response.Redirect(): Response.Redirect方法 ...

  9. 一起谈.NET技术,asp.net 页面转向 Response.Redirect, Server.Transfer, Server.Execute的区别...

    Response.Redirect 简单地发送一条消息到浏览器,告诉浏览器定位到另一个页面.你可以使用下面的代码将用户引导到另一个页面: Response.Redirect("WebForm ...

最新文章

  1. Verilog中基本的数据类型
  2. Cannot find System Java Compiler. Ensure that you have installed a JDK (not just a JRE) and configur
  3. 安卓qpython怎么使用_如何使用QPython开发Android应用?
  4. application.properties amp;amp;amp; application.yml 配置文件详解(转)
  5. webstorm 设置jsp支持
  6. vue项目实现列表页-详情页返回不刷新,再点其他菜单项返回刷新的需求
  7. ios php ide,最好的PHP IDE for Mac? (最好免费!)
  8. Google的自动驾驶汽车无事故成功完成30万英里的驾驶路程
  9. 技术管理中的“沟通”
  10. 深度学习 2 机器学习 神经网络 卷积神经网络
  11. mac bochs 调试linux,Mac OS X下编译安装带debugger的bochs
  12. 快速定位NodeJs线上问题 - 之火焰图篇
  13. Moreau Decomposition 和 共轭次梯度定理
  14. 软件测试面试题目—接口测试面试题,梦寐以求的答案来了
  15. sql2008服务器运行哪个,SQL SERVER 2008R2 暂用服务器内存直到服务器死机。
  16. 【深入理解C++】析构函数
  17. 中国最好大学网爬取大学排名信息
  18. 七牛云存对象存储及域名设置
  19. Bootstrap3基础 btn-xs/sm... 按钮的四种大小
  20. Vue框架+Axios框架

热门文章

  1. android listview下拉刷新动画,ListView下拉刷新实现方式详解和改造(上)
  2. 白盒测试和黑盒测试_黑盒测试与白盒测试的比较
  3. oracle删除unique key,概述Oracle Unique约束
  4. linux mint 最新版,Linux Mint安装最新版R
  5. hibernate版本_Myeclipse 2020.5 版本首发!支持 Java14
  6. mysql 日志 超过 m,linux 下查找大日志文件,比如大于500M的文件
  7. ros安装过后怎么找不到安装文件_ros配置乐视奥比中光相机
  8. CORDIC算法VHDL设计实现及仿真
  9. python图片找字_如何用python查找图像中的字母
  10. lstm代码_只需5行代码!LSTM时间序列建模以及预测