今天在使用ServerTransfer和Response.Redirect定位到當前頁面來實現刷新頁面時,發現了一些現象:
1.使用Response.Redirect刷新本頁面,造成當前頁面顯示的數據消失的情況:
PRotected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { String Path; string connString = "server=.;database=ComInfo;integrated security=true"; SqlConnection conn = new SqlConnection(connString); conn.Open(); String PassUserid = Request.QueryString["C_Id"];//獲取上一頁面傳遞過來的字段值 String strsql = "select E_Id,E_Name,E_Sex,E_Position,E_Organisation,E_Phone,E_Address from Emp where C_Id ='" + PassUserid + " '"; SqlDataAdapter da = new SqlDataAdapter(strsql, conn); DataSet ds = new DataSet(); da.Fill(ds); GridView1.DataSource = ds; GridView1.DataBind(); conn.Close(); } }
A頁面,在GridView控件中加一列HypLinkField,其Text值為:詳細信息。設置DataNavigateUrlFormatString屬性為“~/B..aspx”?C_Id";DataNavigateUrlField屬性填寫要傳遞的字段名:C_Id。B頁面的.cs文件Load函數中寫下以上代碼。這樣,在A頁面點擊"詳細信息”就能跳轉到B頁面,在B頁面顯示Emp表中與C_Id相應的值詳細信息。
這種情況下,使用Response.Redirect("B..aspx");刷新時,這些顯示的信息就會消失。而使用Server.Transfer則不會出現這種狀況。
2.使用Response.Redirect刷新本頁面不會造成顯示信息消失的情況:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { String strConn = "server=.;database=ComInfo;integrated security=true;"; String PassUserid = session["C_Id"].ToString(); SqlConnection conn = new SqlConnection(strConn); conn.Open(); string strsql = "select E_Id,E_Name,E_Sex,E_Position,E_Organisation,E_Phone,E_Address from Emp where C_Id ='" + PassUserid + " '"; SqlDataAdapter da = new SqlDataAdapter(strsql, conn); DataSet ds = new DataSet(); da.Fill(ds); GridView1.DataSource = ds; GridView1.DataBind(); conn.Close(); } }
這次頁面間傳值使用的方法是:Session,在A中用Session["C_Id"]=strId,記錄下C_Id的值,在B頁面中獲取。之后,不管用Response.Redirect還是server.transfer刷新頁面,都不會造成數據消失。
分析:第一種方法傳遞到B頁面的值,通過Response.redirect刷新后會釋放,導致查詢語句查找不到相應的信息。以后再用第一方法進行頁面間傳值時,要注意使用的跳轉語句,不要出現第一種狀況。
以下是Server.Transfer和Response.Redirect的對比
1. Server.Transfer只能夠轉跳到本地虛擬目錄指定的頁面,而Response.Redirect則十分靈活;2. Server.Transfer可以將頁面參數方便傳遞到指定頁面;3. Server.Transfer跳到別的頁面后,瀏覽器顯示的地址不會改變,因為重定向完全在服務器端進行,瀏覽器根本不知道服務器已經執行了一次頁面變換。4. Server.Transfer可以減少客戶端對服務器的請求;5.Server.Transfer方法把執行流程從當前的.aspx文件轉到同一服務器上的另一個.aspx頁面。調用Server.Transfer時,當前的.aspx頁面終止執行,執行流程轉入另一個.aspx頁面,但新的.aspx頁面仍使用前一.aspx頁面創建的應答流。 Response.Redirect則是客戶端第一次請求服務器返回狀態代碼302及新URL,客戶端再次請求新URL,服務器再返回新頁面,比Server.Transfer多一次應答。
新聞熱點
疑難解答