asp.net Response.Redirect和Server.Transfer(Execute)的区别
转载来的: 1、 浏览器ASP文件请求->服务器执行->遇到response.redirect语句->服务器发送response.redirect后面的地址给客户机端的浏览器->浏览器请求执行新的地址 2、 浏览器ASP文件请求->服务器执行->遇到Server.Transfer语句->服务器转向新的文件切换对象: Server.Transfer方法与Redirect方法相比另一个显著的优势是在页面转换时,Request集合里的内容不会丢失,这给我们编程带来很大的方便。
1、Response.Redirect可以切换到任何存在的网页。 1、 Server.Transfer只能切换到同目录或者子目录的网页。资料保密:
1、 Response.Redirect后地址会变成跳转后的页面地址。 2、 Server.Transfer后地址不变,隐藏了新网页的地址及附带在地址后边的参数值。具有资料保密功能。传递的资料量(网址后附带的参数):
1、 Response.Redirect能够传递的资料以2KB为限。 2、 传递的资料超过2KB时,务必使用Server.Transfer。
Response.Redirect方法导致浏览器链接到一个指定的URL。当Response.Redirect()方法被调用时,它会创建一个应答,应答头中指出了状态代码302(表示目标已经改变)以及新的目标URL。浏览器从服务器收到该应答,利用应答头中的信息发出一个对新URL的请求。 这就是说,使用Response.Redirect方法时复位向操作发生在客户端,总共涉及到两次与服务器的通信(两个来回):第一次是对原始页面的请求,得到一个302应答,第二次是请求302应答中声明的新页面,得到复位向之后的页面。 Server.Transfer方法把执行流程从当前的ASPX文件转到同一服务器上的另一个ASPX页面。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。如果用Server.Transfer方法实现页面之间的导航,浏览器中的URL不会改变,因为复位向完全在服务器端进行,浏览器根本不知道服务器已经执行了一次页面变换。默认情况下,Server.Transfer方法不会把窗体数据或查询字符串从一个页面传递到另一个页面,但只要把该方法的第二个参数设置成True,就可以保留第一个页面的窗体数据和查询字符串。 同时,使用Server.Transfer时应注意一点:目标页面将使用原始页面创建的应答流,这导致ASP.NET的机器验证检查(Machine Authentication Check,MAC)认为新页面的ViewState已被篡改。因此,如果要保留原始页面的窗体数据和查询字符串集合,必须把目标页面Page指令的EnableViewStateMac属性设置成False。
说到server. transfer,就不得不说server. execute,主要的区别在于,server. execute在第二个页面结束执行后,还会返回第一个页面继续处理。 server.transfer和server.execute也是有局限性的,他们只能redirect到同一个web application的页面中去,而且,这个过程对client端是透明的。 |