1、Server.Transfer - 用于把处理的控制权从一个页面转移到另一个页面,在转移的过程中,没有离开服务器,内部控件(如:request, session 等)的保存的信息不变,因此,你能从页面 A 跳到页面 B 而不会丢失页面 A 中收集的用户提交信息。此外,在转移的过程中,浏览器的 URL 栏不变。

2、Response.Redirect - 发送一个 HTTP 响应到客户端,告诉客户端跳转到一个新的页面,客户端再发送跳转请求到服务器。使用此方法时,将无法保存所有的内部控件数据,页面 A 跳转到页面 B,页面 B 将无法访问页面 A 中 Form 提交的数据。


两种都是将用户重定向到另一页,或者说进行页面的跳转。区别如下:

1、Server.Transfer   使用服务器端方法将用户重定向到另一页
   在此方案中,服务器只是将上下文传输到另一页。其优点是您可以共享页之间的页上下文信息。其缺点是用户的浏览器不知道在进行传输,因此不更新浏览器的历史记录。如果用户刷新此页,则可能会产生意外的结果。通常在程序内部各个form之间跳转的时候使用。
    以下示例显示如何重定向到另一页。
' Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Server.Transfer("Webform2.aspx")
    End Sub

// C#
private void Button1_Click(object sender, System.EventArgs e)
{
   Server.Transfer("Webform2.aspx");
}

2、Response.Redirect        将用户从浏览器重定向到另一页
   在此方案中,将一个命令发送到用户浏览器,使浏览器获取另一页。其优点是更新浏览器的历史记录。其缺点是此方案执行额外的往返过程,这会影响性能。 通常在做某个指向外部的web链接的时候用。

以下示例显示如何根据局部变量 UserLanguage(在其他地方设置)的内容来进行重定向。
' Visual Basic
Response.BufferOutput = True
If UserLanguage = "English" Then
   Response.Redirect("http://www.microsoft.com/gohere/look.htm")
ElseIf UserLanguage = "Deutsch" Then
   Response.Redirect("http://www.microsoft.com/gohere/look_deu.htm")
ElseIf UserLanguage = "Español" Then
   Response.Redirect("http://www.microsoft.com/gohere/look_esp.htm")
End If

// C#
Response.BufferOutput = true;
if (UserLanguage == "English")
{
   Response.Redirect("http://www.microsoft.com/gohere/look.htm");
}
else if (UserLanguage == "Deutsch")
{
   Response.Redirect("http://www.microsoft.com/gohere/look_deu.htm");
}
else if (UserLanguage == "Español")
{
   Response.Redirect("http://www.microsoft.com/gohere/look_esp.htm");
}