第一種:
頁面注冊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 也適用。
待續...
