≡≡JABBY's Blog≡≡

菩提本无树,明镜亦非台,本来无一物,何处惹尘埃

也说页面重定向

      一、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

posted on 2005-04-18 23:05    阅读(2564)  评论(3编辑  收藏  举报

导航