Response.Redirect和Server.Transfer的区别(粗略阐述)
在ASP.NET中,在后台传值方式目前大多都是用 Response.Redirect("页面地址") 来重定向页面的,但是现在还有一种方式也可
以达到重定向页面的作用,而且在某些时刻会起到一种很棒的效果,那就是使用 Server.Transfer("页面地址") 来重定向地址。
Response.Redirect :Response.Redirect 会将地址输出至浏览器,执行重定向操作。但是请注意,在程序执行到Response.Redirect("页面地址") 语句时,会立即中断当前页面的生命周期,直接向客户端返回信息,让客户端进行重定向操作。这个时候页面URL将会显示重定向后的地址。
Server.Transfer :Server.Transfer 是一个很奇特的方法。当使用 Server.Transfer 方法重定向页面时,虽然页面也会被重定向至指定页,但是并不会在浏览器的URL上体现出来,并且若重定向的页面后有参数,也不会显示在浏览器的URL上。
简单的阐述:
Response.Redirect 是通知客户端浏览器(客户端浏览器,地址栏地址发生变化)跳转的。而Server.Transfer是在服务端跳转(客户端浏览器,地址栏地址不发生变化)简单的来说,Response.Redirect需要多走一个来回。而,Server.Transfer能少走一个。Response.Redirect 对于客户端浏览来说,速度可能会慢点,但对于服务端能少些负担;而Server.Transfer对于客户端浏览会快一些(因为少走一个来回),但服务器负担会大一些。
数据保密性:
1、Response.Redirect后地址会变成跳转后的页面地址。
2、Server.Transfer后地址不变,隐藏了新网页的地址及附带在地址后边的参数值。具有数据保密功能。
传递的数据量(即:网址后附带的参数):
利用网址来传递数据,必须注意的是网址的编码,要编码的原因是,有此字符有特殊意义,例如:&,它是参数的分隔符号,解决的方法是必须修改: 调用Server.URLEncode(变量)对要传递的数据加以编码。
1、Response.Redirect能够传递的数据以2KB为限。
2、传递的数据超过2KB时,务必使用Server.Transfer。
代码演示:
第一个页面:Num1.aspx.cs
前台代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Num1.aspx.cs" Inherits="跳转.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table>
<tr>
<td>用户名:
<asp:TextBox runat="server" ID="txt_name" />
<asp:RequiredFieldValidator ID="rfv_name" runat="server" ErrorMessage="请输入用户名" ForeColor="Red" ControlToValidate="txt_name"></asp:RequiredFieldValidator>
</td>
<td>密码:
<asp:TextBox runat="server" ID="txt_pwd" />
<asp:RequiredFieldValidator ID="rfv_pwd" runat="server" ErrorMessage="请输入密码" ForeColor="Red" ControlToValidate="txt_pwd"></asp:RequiredFieldValidator>
</td>
<td>
<asp:Button Text="登录" runat="server" ID="btn_login" OnClick="btn_login_Click" />
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
后台代码:
Response.Redirect方法:
protected void btn_login_Click(object sender, EventArgs e)
{
string name = txt_name.Text.Trim();
string pwd = txt_pwd.Text;
//Response.Redirect 传值
Response.Redirect($"Num2.aspx?name={name}&&pwd={pwd}");
}
演示结果:
地址栏显示跳转的信息,地址为跳转后第二个页面的地址
Server.Transfer方法
protected void btn_login_Click(object sender, EventArgs e)
{
string name = txt_name.Text.Trim();
string pwd = txt_pwd.Text;
//Server.Transfer 传值
Server.Transfer($"Num2.aspx?name={name}&&pwd={pwd}");
}
演示结果:
地址栏没有显示跳转的信息,地址栏地址仍为第一个页面的地址