1.QuerySting在頁(yè)面間傳遞值
這種方法的寫(xiě)法:在要傳遞值的頁(yè)面,Response.Redirect(url),值包含在在url中。接收值得頁(yè)面,Request.QueryString["變量名"]。
這是使用起來(lái)很簡(jiǎn)單的一種方式,但是它不是很安全,因為值會(huì )在瀏覽器里的地址欄里顯示。并且它也不能傳遞對象,對長(cháng)度也有限制,如果要傳遞的值很多,且對安全要求也高的話(huà),這種方式就不適合了。
2.Session變量
我們通常在一個(gè)頁(yè)面中,將值放到session變量中,在另外幾個(gè)頁(yè)面使用它。Session變量存儲過(guò)多的數據會(huì )消耗比較多的服務(wù)器資源,在使用時(shí)應該慎重。通常將登陸的用戶(hù)名和密碼防到session中,其他頁(yè)面根據判斷session中用戶(hù)名和密碼是否有值來(lái)判斷用戶(hù)是否登錄。
寫(xiě)法:存入到session變量,Session["name"]=“要放入的值”;讀取session中的值,變量名=Session["name"].ToString();
3.Cookie對象變量
Cookie對象變量和session一樣,他們不同的是,session是存在服務(wù)器端,而cookie是存放在客戶(hù)端的。
寫(xiě)法:將值存入到cookie中
HttpCookie userName=new HttpCookie("name");
userName.Value = "值";
Response.AppendCookie(userName);
讀取cookie中的值
變量名 = Request.Cookies["userName"].Value.ToString();
4.使用Application 對象變量
Application對象的作用范圍是整個(gè)全局,他對所有用戶(hù)都有效,session和cookie是對一個(gè)用戶(hù)而言,所以我們可以用它統計登陸該網(wǎng)站的人數。Application變量不會(huì )自己消亡,會(huì )始終占據內存,創(chuàng )建過(guò)多的變量會(huì )降低響應速度,只有在服務(wù)被中止、Global.asa被改變或者該Application被卸載下才會(huì )被終止。
寫(xiě)法:將值存入到application中, Application["name"] = "值";
讀取值,變量名= Application["name"].ToString();
上面是我常用到的幾種方式,當然還有其他方式。還有利用某些控件的PostBackUrl屬性,使用Server.Transfer,使用@PreviousPageType指令,這些暫時(shí)沒(méi)用過(guò),在以后會(huì )試著(zhù)用,用的多了就會(huì )有對比,就能知道在什么場(chǎng)合更適合哪種方式。
jsp中頁(yè)面間對象傳遞的方法:
1.傳遞方法有:page,request,session,application,其中cookie是保存在客戶(hù)端的,是用來(lái)解決HTTP無(wú)狀態(tài)問(wèn)題。
2.Cookie對象變量,cookie是保存在客戶(hù)端的,是用來(lái)解決HTTP無(wú)狀態(tài)問(wèn)題。
3.Cookie對象變量和session一樣,他們不同的是,session是存在服務(wù)器端,而cookie是存放在客戶(hù)端的。
4.Application對象的作用范圍是整個(gè)全局,他對所有用戶(hù)都有效,session和cookie是對一個(gè)用戶(hù)而言,所以我們可以用它統計登陸該網(wǎng)站的人數。Application變量不會(huì )自己消亡,會(huì )始終占據內存,創(chuàng )建過(guò)多的變量會(huì )降低響應速度,只有在服務(wù)被中止、Global.asa被改變或者該Application被卸載下才會(huì )被終止。
5.QuerySting在頁(yè)面間傳遞值。這種方法的寫(xiě)法:在要傳遞值的頁(yè)面,Response.Redirect(url),值包含在在url中。接收值得頁(yè)面,Request.QueryString["變量名"]。
頁(yè)面傳輸有多種方式: 1.url參數傳遞,適用于單個(gè)參數傳遞 父頁(yè)面中 使用url帶參數方式給字面傳輸參數test.jsp?para1=data1¶2=data2,參數使用&分割 子頁(yè)面中 子頁(yè)面中使用瀏覽器的getParameter獲取url中傳遞過(guò)來(lái)的參數 <% String data1=request.getParameter("para1"); String data2=request.getParameter("para2"); %> 2.彈出窗口傳遞,適用于對象傳輸 父頁(yè)面中:var obj = new Object();//定義一個(gè)傳遞給子頁(yè)面的對象 obj.para1=data1; obj.para2=data2; var retObj = null;//用于接收模態(tài)窗口返回對象; retObj = window.showModalDialog("modal.htm",obj,"dialogWidth=200px;dialogHeight=100px"); if(retObj != null) {//retObj.retPara1為子頁(yè)面返回給父頁(yè)面的值,子頁(yè)面中使用window.returnValue這個(gè)對象給父頁(yè)面返回值;if(retObj.retPara1 != null)var retPara = retObj.retPara1; } 子頁(yè)面中: 接收父頁(yè)面傳輸過(guò)來(lái)的對象,一定要判斷是否為空奧。
if(window.dialogArguments != null) var inputObj = g_Obj = window.dialogArguments; var para1 = inputObj.para1; var para2 = inputObj.para2; 子頁(yè)面返回給父頁(yè)面參數: var returnObj = new Object(); returnObj.retPara1 = "returnValue"; window.returnValue = returnObj;//將返回對象付個(gè)window的對象,這樣父頁(yè)面就以獲得子頁(yè)面傳回的對象了。 window.close(); 3.使用window.open彈出頁(yè)面,直接使用window.parent進(jìn)行對象獲取 a.html <body onl oad="b.html"> b.html <body onl oad="showInputPara();"> 需要注意的是這種方法只能獲取a頁(yè)面中的全局變量和對象,不能獲取局部對象和變量 4.借助瀏覽器的Cookie 使用Cookie存在很多不穩定因素,這里不建議使用。
給出部分代碼 Cookie cookie = new Cookie("key", "value"); //往Cookie中設置鍵值對,鍵必須唯一,值可以是對象 cookie.setMaxAge(60); //設置60秒生存期,如果設置為負值的話(huà),則為瀏覽器進(jìn)程Cookie(內存中保存),關(guān)閉瀏覽器就失效。 Cookie[] cookies = request.getCookies(); //獲取Cookie中的鍵值對數組 5.借助session。
引言 Web頁(yè)面是無(wú)狀態(tài)的, 服務(wù)器對每一次請求都認為來(lái)自不同用戶(hù),因此,變量的狀態(tài)在連續對同一頁(yè)面的多次請求之間或在頁(yè)面跳轉時(shí)不會(huì )被保留。
在用ASP.NET 設計開(kāi)發(fā)一個(gè)Web系統時(shí), 遇到一個(gè)重要的問(wèn)題是如何保證數據在頁(yè)面間進(jìn)行正確、安全和高效地傳送,Asp.net 提供了狀態(tài)管理等多種技術(shù)來(lái)解決保存和傳遞數據問(wèn)題,以下來(lái)探討.NET 下的解決此問(wèn)題的各種方法和各自的適用場(chǎng)合。 1、ASP.NET頁(yè)面間數據傳遞的各種方法和分析 1.1 使用Querystring 方法 QueryString 也叫查詢(xún)字符串, 這種方法將要傳遞的數據附加在網(wǎng)頁(yè)地址(URL)后面進(jìn)行傳遞。
如頁(yè)面A.aspx 跳轉到頁(yè)面B.aspx,可以用Request.Redirect("B.aspx?參數名稱(chēng)=參數值")方法,也可以用超鏈接:,頁(yè)面跳轉后,在目標頁(yè)面中可用Ruquest["參數名稱(chēng)"]來(lái)接收參數。使用QuerySting 方法的優(yōu)點(diǎn)是實(shí)現簡(jiǎn)單, 不使用服務(wù)器資源;缺點(diǎn)是傳遞的值會(huì )顯示在瀏覽器的地址欄上,有被篡改的風(fēng)險,不能傳遞對象,只有在通過(guò)URL 請求頁(yè)時(shí)查詢(xún)字符串才是可行的。
1.2 利用隱藏域 隱藏域不會(huì )顯示在用戶(hù)的瀏覽器中, 一般是在頁(yè)面中加入一個(gè)隱藏控件, 與服務(wù)器進(jìn)行交互時(shí)把值賦給隱藏控件并提交給下一頁(yè)面。隱藏域可以是任何存儲在網(wǎng)頁(yè)中的與網(wǎng)頁(yè)有關(guān)的信息的存儲庫。
使用隱藏域存入數值時(shí)用:hidden 控件.value=數值,取出接收數值時(shí)用:變量=hidden 控件.value。使用隱藏域的優(yōu)點(diǎn)是實(shí)現簡(jiǎn)單, 隱藏域是標準的HTML 控件,不需要復雜的編程邏輯。
隱藏域在頁(yè)上存儲和讀取,不需要任何服務(wù)器資源,幾乎所有瀏覽器和客戶(hù)端設備都支持具有隱藏域的窗體。缺點(diǎn)是存儲結構少,僅僅支持簡(jiǎn)單的數據結構,存儲量少,因為它被存儲在頁(yè)面本身,所以無(wú)法存儲較大的值,而且大的數據量會(huì )受到防火墻和代理的阻止。
1.3 ViewState ViewState 是由ASP.NET 頁(yè)面框架管理的一個(gè)隱藏的窗體字段。當ASP.NET 執行某個(gè)頁(yè)面時(shí),該頁(yè)面上的ViewState 值和所有控件將被收集并格式化成一個(gè)編碼字符串, 然后被分配給隱藏窗體字段的值屬性。
使用ViewState 傳遞數據時(shí)可用:ViewState [" 變量名"]=數值,在取出數據時(shí)用:變量=ViewState["變量名"]。使用ViewState 的優(yōu)點(diǎn)是:在對同一頁(yè)的多個(gè)請求間自動(dòng)保留值,不用服務(wù)器端資源,實(shí)現簡(jiǎn)單,視圖狀態(tài)中的值經(jīng)過(guò)哈希計算和壓縮,并且針對Unicode 實(shí)現進(jìn)行編碼,其安全性要高于使用隱藏域;缺點(diǎn)是因為ViewState 存儲在頁(yè)面本身,因此如果 存儲較大的值,用戶(hù)顯示頁(yè)和發(fā)送頁(yè)時(shí)的速度可能會(huì )減慢。
雖然視圖狀態(tài)以哈希格式存儲數據,但它仍可以被篡改。 1.4 使用Cookie Cookie 可以在頁(yè)面之間傳遞少量信息, 可以存儲在客戶(hù)端的文本文件中,也可存儲在客戶(hù)端的內存中。
Cookie 方法適用于存儲少量頁(yè)面中經(jīng)常改動(dòng)的信息, 如為登陸過(guò)的網(wǎng)站保存登陸用戶(hù)名,為用戶(hù)輸入提供方便,還有在一些用戶(hù)自定義項目上保存用戶(hù)的個(gè)性化設置。使用Cookie傳遞數據時(shí)可用:Response.Cookies["鍵名"]=鍵值;取出數據用:變量名=Request.Cookies["鍵名"]。
使用Cookie 優(yōu)點(diǎn)是:Cookie 存儲在客戶(hù)端, 不使用服務(wù)器資源,實(shí)現簡(jiǎn)單,可配置到期時(shí)間。缺點(diǎn)是:可以存儲的數據量比較少,由于Cookie 并不被所有的瀏覽器支持,而且還可能被用戶(hù)禁止或刪除,所以不能用于保存關(guān)鍵數據。
另外,Cookie 保存的形式是簡(jiǎn)單的明文文本,在它里面不宜保存敏感的、未加密的數據。 1.5 使用Application 變量 使用Application 變量也可以實(shí)現頁(yè)面間的傳值,Application變量是全局性的,所有用戶(hù)共享一個(gè)Application 變量,一旦定義,它將影響到程序的所有部分。
如果想在整個(gè)應用程序范圍使用某個(gè)變量值Application 對象將是最佳的選擇。存入數據時(shí), 把值添加到Application 變量里:Application["變量名"]=數值;取出數據用:變量=Application["變量名"];在不需要使用該Application 時(shí),要顯式清除它:Application["量名"]=null。
Application 優(yōu)點(diǎn):易于使用,全局范圍。可供應用程序中的所有頁(yè)來(lái)訪(fǎng)問(wèn)。
缺點(diǎn):若保存數據的服務(wù)器端進(jìn)程被損壞(如因服務(wù)器崩潰、升級或關(guān)閉而損壞),那么數據就會(huì )丟失,所以利用Application 一定要有保底的策略;占用服務(wù)器端的內存,這可能會(huì )影響服務(wù)器的性能以及應用程序的可伸縮性。 1.6 使用Session 變量 Session 對象可以用來(lái)存儲需要維護的指定對話(huà)的信息,不同的客戶(hù)端生成不同的Session 對象。
Session 用于存儲特定于單獨會(huì )話(huà)的短期信息。Session 的使用方法和格式與Application 相同。
優(yōu)點(diǎn):易于實(shí)現,并且提供較高的安全性和持久性,可以應對IIS 重啟和輔助進(jìn)程重啟,可在多進(jìn)程中使用。缺點(diǎn)是耗用服務(wù)器端的內存。
所以不要存儲大量的信息。Session 最常見(jiàn)的用途是與Cookie 一起向Web 應用程序提供用戶(hù)標識功能,Session也可用于不支持Cookie 的瀏覽器。
id=1; response. Redirect()。
. 2.使用Session變量3.使用Server.Transfer4.Application5.6.數據庫使用QueryString 使用QuerySting在頁(yè)面間傳遞值已經(jīng)是一種很老的機制了,這種方法的主要優(yōu)點(diǎn)是實(shí)現起來(lái)非常簡(jiǎn)單,然而它的缺點(diǎn)是傳遞的值是會(huì )顯示在瀏覽器的地址欄上的(不安全),同時(shí)又不能傳遞對象,但是在傳遞的值少而安全性要求不高的情況下,這個(gè)方法還是一個(gè)不錯的方案。使用這種方法的步驟如下: 1,使用控件創(chuàng )建web表單(form) 2,創(chuàng )建可以返回表單的按鈕和鏈接按鈕 3,在按鈕或鏈接按鈕的單擊事件里創(chuàng )建一個(gè)保存URL的字符變量 4,在保存的URL里添加QueryString參數 5,使用Response.Redirect重定向到上面保存的URL 下面的代碼片斷演示了如何實(shí)現這個(gè)方法: 源頁(yè)面代碼: private void Button1_Click(object sender, System.EventArgs e) { string url; url="anotherwebform.aspx?name=" + TextBox1.Text + "&email=" + TextBox2.Text; Response.Redirect(url); } 目標頁(yè)面代碼: private void Page_Load (object sender, System.EventArgs e) { Label1.Text=Request.QueryString["name"]; Label2.Text=Request.QueryString["email"]; }使用Session變量 使用Session變量是可以在頁(yè)面間傳遞值的的另一種方式,在本例中我們把控件中的值存在Session變量中,然后在另一個(gè)頁(yè)面中使用它,以不同頁(yè)面間實(shí)現值傳遞的目的。
但是,需要注意的是在Session變量存儲過(guò)多的數據會(huì )消耗比較多的服務(wù)器資源,在使用session時(shí)應該慎重,當然了,我們也應該使用一些清理動(dòng)作來(lái)去除一些不需要的session來(lái)降低資源的無(wú)謂消耗。使用Session變量傳遞值的一般步驟如下: 1,在頁(yè)面里添加必要的控件 2,創(chuàng )建可以返回表單的按鈕和鏈接按鈕 3,在按鈕或鏈接按鈕的單擊事件里,把控件的值添加到session變量里 4,使用Response.Redirect方法重定向到另一個(gè)頁(yè)面 5,在另一個(gè)頁(yè)面提取session的值,在確定不需要使用該session時(shí),要顯式清除它 下面的代碼片斷演示了如何實(shí)現這個(gè)方法: 源頁(yè)面代碼: private void Button1_Click(object sender, System.EventArgs e) { //textbox1 and textbox2 are webform //controls Session["name"]=TextBox1.Text; Session["email"]=TextBox2.Text; Server.Transfer("anotherwebform.aspx"); } 目標頁(yè)面代碼: private void Page_Load (object sender, System.EventArgs e) { Label1.Text=Session["name"].ToString(); Label2.Text=Session["email"].ToString(); Session.Remove("name"); Session.Remove("email"); }使用Server.Transfer 這個(gè)方法相比上面介紹的方法稍微復雜一點(diǎn),但在頁(yè)面間值傳遞中卻是特別有用的,使用該方法你可以在另一個(gè)頁(yè)面以對象屬性的方式來(lái)存取顯露的值,當然了,使用這種方法,你需要額外寫(xiě)一些代碼以創(chuàng )建一些屬性以便可以在另一個(gè)頁(yè)面訪(fǎng)問(wèn)它,但是,這個(gè)方式帶來(lái)的好處也是顯而易見(jiàn)的。
總體來(lái)說(shuō),使用這種方法是簡(jiǎn)潔的同時(shí)又是面向對象的。使用這種方法的整個(gè)過(guò)程如下: 1,在頁(yè)面里添加必要的控件 2,創(chuàng )建返回值的Get屬性過(guò)程 3,創(chuàng )建可以返回表單的按鈕和鏈接按鈕 4,在按鈕單擊事件處理程序中調用Server.Transfer方法轉移到指定的頁(yè)面 5,在第二個(gè)頁(yè)面中,我們就可以使用Context.Handler屬性來(lái)獲得前一個(gè)頁(yè)面實(shí)例對象的引用,通過(guò)它,就可以使用存取前一個(gè)頁(yè)面的控件的值了 以下代碼綜合實(shí)現上述步驟過(guò)程的代碼: 源頁(yè)面代碼: 把以下的代碼添加到頁(yè)面中 public string Name { get { return TextBox1.Text; } } public string EMail { get { return TextBox2.Text; } } private void Button1_Click (object sender, System.EventArgs e) { Server.Transfer("anotherwebform.aspx"); } 目標頁(yè)面代碼: private void Page_Load。
1、表單傳遞(Form表單中,分成post和get)。
2、URL方式重寫(xiě)傳遞(一個(gè)地址http://……?參數1=數值1&;參數2=數值2……&;參數n=數值n)
3、Session
4、Cookie
5、利用PreviousPage.FindControl(“控件名”)的方式(放在if(page.PreviousPage!=null && PreviousPage.IsCrossPagePostBack){}中)。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:2.585秒