Response.Redirect(nextURL)和Server.Transfer(nextURL)有什么异同?

解决方案 »

  1.   

    Server.Transfer方法把执行流程从当前的ASPX文件转到同一服务器上的另一个ASPX页面。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。    如果用Server.Transfer方法实现页面之间的导航,浏览器中的URL不会改变,因为重定向完全在服务器端进行,浏览器根本不知道服务器已经执行了一次页面变换。Response.Redirect则是客户端第一次请求服务器返回状态代码302及新URL,客户端再次请求新URL,服务器再返回新页面,比Server.Transfer多一次应答。
      

  2.   

    Response.Redirect(nextURL)是服务器将要请求的url发给浏览器,在由浏览器来向服务器发出要访问这们url的请求,然后服务器在返回该页,
    Server.Transfer(nextURL)是服务器直接返回url中指定的页
      

  3.   

    补充penning(飞鱼)说的:
    一般来说如果需要在两个页面间共享数据,而且数据量比较大的时候,用transfer会比较合适,在第二个页面中可以直接使用前一页面的数据,eg:
    TransferToPage.aspx
    if(Context.Handler is TransferFromPage)
    {
    TransferFromPage post=(TransferFromPage)Context.Handler;
    startWeekID=Int32.Parse(post.DdlStartWeek.SelectedValue);
    endWeekID=Int32.Parse(post.DdlEndWeek.SelectedValue);
    }
    直接引用前一页面控件的值。
    Redirect可以传递一些较小字符串值。
    Response.Redirect("b.aspx?id=0&name=Jeff");
      

  4.   

    使用Server.Transfer
      这个方法相比上面介绍的方法稍微复杂一点,但在页面间值传递中却是特别有用的,使用该方法你可以在另一个页面以对象属性的方式来存取显露的值,当然了,使用这种方法,你需要额外写一些代码以创建一些属性以便可以在另一个页面访问它,但是,这个方式带来的好处也是显而易见的。总体来说,使用这种方法是简洁的同时又是面向对象的。使用这种方法的整个过程如下:
    1,在页面里添加必要的控件
    2,创建返回值的Get属性过程
    3,创建可以返回表单的按钮和链接按钮
    4,在按钮单击事件处理程序中调用Server.Transfer方法转移到指定的页面
    5,在第二个页面中,我们就可以使用Context.Handler属性来获得前一个页面实例对象的引用,通过它,就可以使用存取前一个页面的控件的值了
    以下代码综合实现上述步骤过程的代码:
      源页面代码:
        把以下的代码添加到页面中
       public string Name
    {
     get
     {
     return TextBox1.Text;
     }
    }public string EMail
    {
     get
     {
     return TextBox2.Text;
     }
    }
      然后调用Server.Transfer方法
    private void Button1_Click
    (object sender, System.EventArgs e)
    {
     Server.Transfer("anotherwebform.aspx");
    }
       目标页面代码:
    private void Page_Load
    (object sender, System.EventArgs e)
    {
     //create instance of source web form
     WebForm1 wf1;
     //get reference to current handler instance
     wf1=(WebForm1)Context.Handler;
     Label1.Text=wf1.Name;
     Label2.Text=wf1.EMail;
    }很有用