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