2011-02-01 42 views
3

當我寫server.transfer("defaul2.aspx"); 在URL default2.aspx不顯示,而不是它顯示defaul.aspx頁。 當我寫response.redirect("default2.aspx");在asp.net server.transfer?

in url default2.aspx頁面顯示有什麼不同。

+2

可能重複的Response.Redirect(http://stackoverflow.com/questions/224569/server-transfer-vs-response-redirect) – Fredou 2011-02-01 12:40:49

+0

這不是確切的重複,但回答這個問題爲好。因此我投票結束。 – 2011-02-01 12:43:01

回答

9

這是因爲Server.Transfer()Response.Redirect()不相同的方式工作。

Server.Transfer()沒有結束當前請求,只指示ASP.NET停止渲染當前頁並開始呈現新的頁面,而不是。客戶端並不聰明,從服務器的角度來看,服務器仍然在響應初始請求,所以顯示在地址欄中的URL不會改變。

Response.Redirect()結束當前請求並向客戶端發送302響應代碼。然後,客戶端發出另一個 HTTP請求重定向的URL,並處理該響應。由於客戶端知道URL已更改,因此它會在其地址欄中顯示重定向的URL。

2

Response.Redirect方法:
它有助於從代碼導航到另一個頁面。這就像點擊一個超鏈接。要使用按鈕點擊或鏈接按鈕控制或從服務器端代碼使用響應對象的重定向方法,從一個頁面導航到另一個頁面。 使用Response.rediect()方法,您無法從目標頁面上的源頁面獲取信息。 它的源代碼是像 VB.Net代碼

Private Sub Button1_Click(ByVal Sender as System.Object, ByVal e as System.EventArgs) Handles Button1.Click 
    'Display target page. 
    Response.Redirect("Target.aspx") 
End Sub 

C#代碼

private void Button1_Click(Object sender, System.EventArgs e) 
{ 
     //Display Target Page. 
     Response.Redirect("Target.aspx"); 
} 

使用使用Server.Execute方法
使用使用Server.Execute方法處理的對象的web表單不離開源頁面。這項技術可讓您將目標頁面的結果嵌入源頁面上的區域。與Server.Transfer類似,它還要求EnableViewStateMac屬性將page指令設置爲false。 假設我必須頁面一個是Calculate.aspx有兩個文本框和一個按鈕控件。點擊按鈕點擊事件。我執行Server.Execute到Result.aspx另一個aspx頁面。 源代碼:

protected void btn_Click(object sender, EventArgs e) 
{ 
    Server.Execute("Result.aspx"); 
} 

在Result.aspx pageload事件中寫下面的代碼。的[Server.Transfer的比。

protected void Page_Load(object sender, EventArgs e) 
{ 
    NameValueCollection colform = new NameValueCollection(); 
    colform = Request.Form; 
    Response.Write("<h2>Additon Result:</h2>" + (Convert.ToInt32(colform["TextBox1"]) + Convert.ToInt32(colform["TextBox2"]))); 
}