第一种:
页面注册js脚本跳转,属于GET传值方式
Page.ClientScript.RegisterStartupScript(GetType(), "KEY1", "window.open('" + url + "','测试','_self');", true);
Response.Write("<script type=\"text/javascript\">window.location.href='" + url + "'</script>");
...
第二种:【重定向方法传输】
属于GET传值方式
Response.Redirect(url+"?id=1")
由于Response.Redirect方法要进行两次请求响应操作
(
注:首先是发送一个http请求到客户端,通知需要跳转到新页面,这将导致客户端发送一个新的请求到服务器,
换句话说, 一个重定向请求实际上是两个请求响应:一个是最初的请求响应,另一个是新的重定向请求响应
)
,因此,我们应该在对性能要求高的网站尽量避免使用这种方法。要注意的是重定向请求只是一个GET请求,就意味着我们不能从源页中通过重定向命令提交数据。
但是我们可以在重定向中使用查询字符串来传递数据。然而,只从技术上说,
使用redirect方式确实可以从一个网页跳到另一个网页。相比之下,Server.Transfer会更有效率,但是跳转的范围仅限于同一个Web服务器(同一站点)的不同网页。
从本质上说,我们可以使用Server.Transfer来消除不必要的请求响应操作。如果我们需要重定位到不同服务器的网页,就需要使用Response.Redirect方法
第三种:【服务器传输方法】
属于POST传值方式
(1)、Server.Transfer(url)
和依赖于客户端向另一个新页发请求不同,服务器传输是一种服务器重定向技术,这种技术通过简单的改变Web服务器所处理的代码来达到请求一个新页的目的。
当被请求页和源页面在同一个服务器时,服务器传输要比Response.Redirect方法更有效,这是由于这种技术可以避免额外的开销,仅仅使用服务器
的资源就可以进行重定向。要注意的这种技术有一个副作用,在页面进行重定向时,客户端的URL仍然会保持源页面的URL(地址栏地址不变),
这可能会使客户认为他们所获得的数据是源页面产生的。当然,在大多数情况下,这不是问题,但是这将使调试变得更困难。
(2)、Sever.Execute(url)
而且跳转的范围仅限于同一个Web服务器(同一站点)的不同网页。这个方法是需要将一个页面的输出结果插入到另一个aspx页面的时候使用,大部分是在表格中,
将某一个页面类似于嵌套的方式存在于另一页面(将目标页面插入到源页面中),
这个方法的重定向请求是发生在服务器端,所以浏览器的url地址仍然保留的是原页面的地址(地址栏地址不变),
第四种:【实现跨网页提交】
属于POST传值方式
<asp:TextBox runat="server" ID="txt_username"></asp:TextBox><br /> <asp:Button runat="server" ID="Button4" Text="POST传递 跨页提交" PostBackUrl="~/Login.aspx" />
在源页面中使用PostBackUrl指定目标页面,然后在目标页面获取源页面中的值:
protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { //////////跨页提交 Transfer Execute 跳转时 PreviousPage均不为空 //这个属性无论在何时当前页面进行跨网页提交操作时都会指向源页面,而不是目标页面 if (PreviousPage != null) { if (PreviousPage.IsCrossPagePostBack) { TextBox text=PreviousPage.FindControl("txt_username") as TextBox; this.lbl_param.InnerHtml = text.Text; } } } }
以上这种获取值的方式,Transfer 和 Execute 也适用。
待续...