• Server的Transfer和Response的Redirect


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

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

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

    ======================================

    ransfer: 
    可靠编程 
    转移的目标页应是同一应用程序中的另一 Web 窗体页(.aspx 页)。不能使用 Server.Transfer 重定向到 .asp 或 .asmx 页。 

    确保目标页存在。 

    因为 Server.Transfer 是在服务器上执行的,所以浏览器没有页更改的记录。因此,如果用户刷新此页,则可能会产生意外的结果。 

    Redirect: 
    可靠编程 
    Redirect 方法是通过浏览器执行的,因此在服务器和浏览器之间产生额外的往返过程。 

    确保目标页存在。 
    安全性 
    由于该方法是通过客户端执行的,所以容易被欺骗和篡改。 

    ==========================================

    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.

  • 相关阅读:
    mode
    文件操作
    深浅拷贝
    基础数据类型补充
    再谈编码 decode和encode
    Python练习题 015:一颗自由落地的球
    Python练习题 014:完数
    Python练习题 013:求解a+aa+aaa……
    Python练习题 012:字符统计
    Python练习题 011:成绩打分
  • 原文地址:https://www.cnblogs.com/qiushuixizhao/p/3836657.html
Copyright © 2020-2023  润新知