页面跳转及Response.Redirect和Server.Transfer的区别
前台页面跳转方式:
1、带frame的跳转
a window.frames.frameName.location.href= url; //frameName代表某个frame,url代表跳转的路径。
b 打开一个新窗口,window.open(url,'frameName');
2、不带frame的跳转
a window.location.href=url;
b window.history.back(-1);//后退
c window.history.go(-1||-2||...);//后退到前一||二||。。。页面
d window.navigate(url);
e self.location = url;
f top.location = url;
g window.location.reload();//刷新当前页面
h parent.location.reload();//刷新父亲对象页面
i opener.location.reload();//刷新父窗口页面
后台跳转:
1.HyperLink 服务器控件
HTML和ASP中,我们经常用<a href=target.asp>目标</a>方式实现页面的跳转,在ASP.Net中仍可用此方法,另外还可用HyperLink服务控件代替,如下:
<form id="form1" runat="server">
<div>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="target.aspx">目标</asp:HyperLink></div>
</form>
上述两种方法实现结果一样,但是有一点重要区别,HyperLink服务器控件可以在服务器端编程,目标页可以根据当前的状态进行动态的变化.
注: HyperLink控件本身没有事件,因此只能在其他事件中设置NavigateUrl属性,例如:Page_Load.
2.编程
HyperLink实现从一页面到另一页面的跳转的方式是完全由用户控制跳转时机的,如果在跳转之前添加条件判断,使用编程实现比较方便.
使用代码实现页面跳转的方法有: Response.Redirect, Server.Transfer,Server.Execute
(1)Response.Redirect
从页面A跳转到页面B,内部控件保存的所有数据信息将丢失,因此页面B无法访问页面A提交的数据,跳转后浏览器的URL信息改变,但是可以通过Session,Cookie,Application等对象进行页面间的数据传递.
Response.Redirect重定向操作发生在客户端,总共会涉及到两次与Web服务器的通讯.
(2)Server.Transfer
页面A跳转到页面B,同时页面处理的控制权也进行移交,在跳转过程中Request,Session等保存的信息不变,浏览器的URL仍保存A的URL信息.
Server.Transfer的重定向请求在服务器端进行,客户端不知晓服务器执行了页面转换,因此URL保持不变.
(3)Server.Execute
Server.Execute 方法允许当前页面执行同一Web服务器上的另一页面,当另一页面执行完毕后,控制流程重新返回到原页面发出Server.Execute 调用的位置,被调用页面Page指令的EnableViewStateMac属性需要设置为False;
跳转方式的选择:
HyperLink 服务器控件---------用户决定何时转换,用户决定转换的时机
Response.Redirect------需要链接到另一台服务器的情况,需要链接到非aspx类型的页面的时候,需要将查询字符串作为URL一部分保留的情况
Response.Redirect和Server.Transfer的区别
引自:http://blog.csdn.net/popule_daisy/archive/2008/09/10/2907304.aspx
1、浏览器ASPX文件请求->服务器执行->遇到response.redirect语句->服务器发送response.redirect后面的地址给客户机端的浏览器->浏览器请求执行新的地址
2、浏览器ASPX文件请求->服务器执行->遇到Server.Transfer语句->服务器转向新的文件
切换对象:
1、Response.Redirect可以切换到任何存在的网页。
2、Server.Transfer只能切换到同目录或者子目录的网页。
数据保密:
1、Response.Redirect后地址会变成跳转后的页面地址。
2、Server.Transfer后地址不变,隐藏了新网页的地址及附带在地址后边的参数值。具有数据保密功能。
==============
lovehongyuan的总结:
server.Transfer:
对于当前请求,终止当前页的执行,并使用指向一个新页的指定 URL 路径来开始执行此新页。
传输到的页也应该是 .aspx 页。例如,传输到 .asp 或 .asmx 页是无效的。Transfer 方法保留 QueryString 和 Form 集合。
Transfer 调用 End,后者在完成时引发 ThreadAbortException 异常。
ASP.NET 不验证当前用户是否有权查看由 Transfer 方法提交的资源。虽然 ASP.NET 授权和身份验证逻辑运行于调用原始资源处理程序之前,但 ASP.NET 仍将直接调用 Transfer 方法指示的处理程序,并且不为新资源重新运行授权和身份验证逻辑。如果应用程序的安全策略要求客户端具有适当的授权才能访问相应的资源,则应用程序应强制再次授权或提供自定义访问控制机制。
------------------------------------------------------------------
Response.Redirect:
将客户端重定向到新的 URL 并指定该新 URL
Redirect 方法执行客户端重定向,此时浏览器请求新资源。此重定向是一个进入系统的新请求,因此,需要接受 Microsoft Internet 信息服务 (IIS) 和 ASP.NET 安全策略的所有身份验证和授权逻辑的检验