国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
在.net中常用的幾種頁(yè)面間傳遞參數(shù)的方法
在Web 應(yīng)用程序中,頁(yè)面之間交換數(shù)據(jù)(傳值)是一種基
本應(yīng)用,它的實(shí)現(xiàn)效率對(duì)程序性能有直接的影響。傳統(tǒng)的解
決方案是通過(guò)Get 或Post 方法來(lái)實(shí)現(xiàn)的。但在ASP.NET 中,
這2 種方法的使用發(fā)生了變化。因?yàn)锳SP.NET 使用了基于事
件驅(qū)動(dòng)的編程模型,頁(yè)面采用了PostBack 技術(shù)(發(fā)回給自己),
一些傳統(tǒng)的方法必須做出一定的調(diào)整才能適應(yīng)它。同時(shí),
ASP.NET 以其優(yōu)秀的架構(gòu)提供了更多可用于頁(yè)面間傳值的方
法。這些方法各具特色,比較充分地適應(yīng)了各種情況下頁(yè)面
間傳值的需求。
1 頁(yè)面重定向
頁(yè)面間的傳值方法總是與一定的頁(yè)面重定向方法相聯(lián)
系,而且有些傳值方法只能用某種重定向方法才能實(shí)現(xiàn)。
ASP.NET 中有多種頁(yè)面重定向的方法,這里僅介紹下文中用
到(也是最常用的)的2 種。
(1)Redirect 方法
將客戶端重定向到新的頁(yè)面,只是簡(jiǎn)單地終止當(dāng)前頁(yè)面,
并轉(zhuǎn)入新的頁(yè)面開(kāi)始執(zhí)行,對(duì)轉(zhuǎn)入的頁(yè)面無(wú)任何限制。
(2)Transfer 方法
終止當(dāng)前頁(yè)的執(zhí)行,并為當(dāng)前請(qǐng)求開(kāi)始執(zhí)行新的頁(yè)面。
把執(zhí)行流程從當(dāng)前頁(yè)面轉(zhuǎn)到同一服務(wù)器中的另一頁(yè)面,但是
新的頁(yè)面仍然使用當(dāng)前頁(yè)面創(chuàng)建的應(yīng)答流。
這兩種方法的主要區(qū)別是:(1)Redirect 方法可以實(shí)現(xiàn)任
意網(wǎng)頁(yè)間的重定向,而Transfer 方法只能實(shí)現(xiàn)同一服務(wù)器中
ASPX 頁(yè)面間的重定向。(2)Redirect 方法不會(huì)保留當(dāng)前頁(yè)面
的表單(Form)數(shù)據(jù)和查詢字符串(QueryString),而Transfer 方
法則可以保留這些數(shù)據(jù)。
2 傳值方法
為了簡(jiǎn)化問(wèn)題的討論,本文作如下約定:示例基于C#
語(yǔ)言;源頁(yè)和目標(biāo)頁(yè)已經(jīng)導(dǎo)入了必要的命名空間;源頁(yè)面設(shè)
為Src.aspx,值的傳送點(diǎn)設(shè)在控件Button1 的Click 事件中,
待傳送的數(shù)據(jù)保存在控件TextBox1 中; 目標(biāo)頁(yè)面設(shè)為
Dst.aspx,值的接收點(diǎn)設(shè)在該頁(yè)面的Page_Load 事件中,接收
的數(shù)據(jù)顯示在控件Label1 中;不深入討論與之相關(guān)的編程問(wèn)
題,所有示例僅給出基本實(shí)現(xiàn)方法,所有代碼在Visual Studio
2005 中調(diào)試通過(guò)。
2.1 QueryString 的使用
最簡(jiǎn)單最常用的傳值方法,與傳統(tǒng)的 Get 方法相對(duì)應(yīng),
使用變化相對(duì)較小。數(shù)據(jù)直接在URL 中以明文傳遞,對(duì)于用
戶來(lái)說(shuō)是可見(jiàn)的,但是可以加密。
此方法的優(yōu)點(diǎn)是簡(jiǎn)單、方便,缺點(diǎn)是能傳遞的數(shù)據(jù)量少,
而且不能傳遞對(duì)象。示例如下:
Src.aspx:
Private void Button1_Click(object sender, EventArgs e)
{ …
//將待傳送的數(shù)據(jù)保存到URL 中
strUrl=“Dst.aspx?id=”+TextBox1.Text;
//重定向到目標(biāo)頁(yè)面
Response.Redirect(strUrl);
}
Dst.aspx:
private void Page_Load(object sender, EventArgs e)
{ …
//接收數(shù)據(jù)并顯示在Label1 控件中
Label1.Text = Request.QueryString[“id”];
作者簡(jiǎn)介:范明虎(1974-),男,博士研究生,主研方向:網(wǎng)絡(luò)信息
系統(tǒng);樊紅,教授、博士
收稿日期:2009-06-17 E-mail:fanminghu@21cn.com
—89—
}
因?yàn)榉椒ǖ拿枋鐾耆嗤?,為?jié)省篇幅,下文示例只給
出數(shù)據(jù)傳送和接收的實(shí)現(xiàn)代碼。
2.2 Form 的使用
通過(guò)表單中的控件來(lái)傳遞數(shù)據(jù),與傳統(tǒng)的Post 方法相對(duì)
應(yīng),使用變化相對(duì)較大。
該方法的優(yōu)點(diǎn)是可以傳遞大量數(shù)據(jù),并且可以訪問(wèn)源頁(yè)
面控件中的數(shù)據(jù);缺點(diǎn)是操作比較復(fù)雜,生命周期僅限于當(dāng)
前請(qǐng)求。示例如下:
Src.aspx:
public string id{get{return TextBox1.Text;}} //定義公共屬性
Server.Transfer("Dst.aspx"); //重定向到目標(biāo)頁(yè)面
Dst.aspx:
//HTML 中引入PreviousPageType 指令
<%@ PreviousPageType VirtualPath="~/Src.aspx" %>
//代碼中獲取Form 數(shù)據(jù)

Label1.Text=PreviousPage.id;
該方法的實(shí)現(xiàn)靈活多樣。文獻(xiàn)[1]中給出了使用Transfer
進(jìn)行傳值的方法,其他一些文獻(xiàn)中給出了使用隱藏域或者隱
藏字段進(jìn)行傳值的方法,筆者認(rèn)為其實(shí)都是使用Form 進(jìn)行
傳值。因?yàn)閭髦颠^(guò)程中使用的數(shù)據(jù)載體是Form,而不是其他
東西。
2.3 Session 的使用
Sessionss 對(duì)象為當(dāng)前用戶會(huì)話提供信息。通過(guò)其屬性可
以方便地設(shè)置和檢索ASP.NET 會(huì)話狀態(tài)變量,這些變量的值
在會(huì)話持續(xù)期間保留不變,并且可以被同一個(gè)會(huì)話中的所有
頁(yè)面訪問(wèn),這就為頁(yè)面?zhèn)髦堤峁┝送緩胶头奖恪?br>該 方 法 的 特點(diǎn)是[2] : (1)用戶數(shù)據(jù)存儲(chǔ)在服務(wù)器端;
(2)ASP.NET 中的Session 對(duì)象也可以不依賴Cookie 而正常工
作;(3)可以直接存儲(chǔ)對(duì)象,且無(wú)大小限制;(4)有效期與用戶
的活動(dòng)時(shí)間有關(guān),具體為用戶活動(dòng)時(shí)間+自定義延遲時(shí)間。該
方法的缺點(diǎn)是:由于Web 應(yīng)用程序?qū)γ總€(gè)用戶都會(huì)生成
Session 變量,因此它會(huì)隨著用戶數(shù)量的增多而加重服務(wù)器的
負(fù)擔(dān)。
如果數(shù)據(jù)量比較小,Sessionss 對(duì)象是保存只需要在當(dāng)前
對(duì)話中保持的特定數(shù)據(jù)的極好位置。實(shí)例代碼如下:
Src.aspx:
Session[“id”]=TextBox1.Text;
Response.Redirect(“Dst.aspx”);
Dst.aspx:
Label1.Text=Session[“userid”].ToString();
Session.Remove(“id”); //清除Session 變量
2.4 Application 的使用
Application 對(duì)象提供了對(duì)應(yīng)用程序狀態(tài)的訪問(wèn)。與
Session 對(duì)象相比,兩者對(duì)數(shù)據(jù)的存儲(chǔ)與訪問(wèn)都相似,不同之
處在于:每個(gè)Web 應(yīng)用程序只生成一個(gè)Application 實(shí)例,并
應(yīng)用于所有的用戶和會(huì)話;有效期為整個(gè)Web 應(yīng)用程序的生
命周期。因此,該方法非常適合存儲(chǔ)那些數(shù)量少、不隨用戶
變化而變化的常用數(shù)據(jù)。
在多用戶并發(fā)訪問(wèn)控制方面,Apllication 對(duì)象采用了鎖
定機(jī)制,但是它串行化了對(duì)Application 對(duì)象的訪問(wèn),而這對(duì)
于應(yīng)用程序來(lái)說(shuō)有可能形成嚴(yán)重的性能瓶頸。示例如下:
Src.aspx:
Application[“id”]=TextBox1.Text;
Response.Redirect(“Dst.aspx”);
Dst.aspx:
Application.Lock(); //加鎖
Label1.Text=Application[“userid”].ToString();
Application.Unlock(); //解鎖
Application.Remove(“id”); //清除Application 變量
2.5 Cookie 的使用
Cookie 是網(wǎng)站存放在用戶機(jī)器上的一小塊信息,主要用
來(lái)保存一些與用戶相關(guān)的東西。
瀏覽器一般都對(duì)Cookie 的使用進(jìn)行了一些限制[3]:
(1)每個(gè)域最多只能在一臺(tái)用戶機(jī)器上存儲(chǔ)20 個(gè)Cookie;
(2)每個(gè)Cookie 的總尺寸不能超過(guò)4 096 Byte;(3)一臺(tái)用戶的
機(jī)器上Cookie 的總數(shù)不能超過(guò)300 個(gè)。
該方法的缺點(diǎn)是:并非所有的瀏覽器都支持Cookie;用
戶可以禁用和刪除它;信息采用明文保存,安全性差。
當(dāng)特定的用戶需要特定的數(shù)據(jù)片,并且需要把數(shù)據(jù)在某
個(gè)可變的時(shí)段中保持的時(shí)候,Cookie 就非常方便。實(shí)例代碼
如下:
Src.aspx:
Response.Cookies[“id”].Value=TextBox1.Text;
Response.Redirect(“Dst.aspx”);
Dst.aspx:
Label1.Text=Request.Cookies[“id”].Value;
//清除Cookie 變量
Response.Cookies[“id”].Expires=Now.AddDays(-1);
//清除當(dāng)前域名(和路徑)下的所有Cookie
Response.Cookies[cookie].Expires=Now.AddDays(-1);
2.6 Static(靜態(tài))變量的使用
準(zhǔn)確地說(shuō),是使用類的公共靜態(tài)變量。這種變量在應(yīng)用
程序運(yùn)行期間分配固定的存儲(chǔ)空間,它依類而不依類實(shí)例而
存在,使用時(shí)直接通過(guò)類名即可訪問(wèn)。在ASP.NET 中,每個(gè)
頁(yè)面對(duì)應(yīng)一個(gè)類,因此,可以利用它們的公共靜態(tài)變量在頁(yè)
面間傳遞數(shù)據(jù)。
該方法的優(yōu)點(diǎn)是如果善加利用,則可以有效提高數(shù)據(jù)傳
遞效率,缺點(diǎn)是如果濫用,則會(huì)導(dǎo)致用戶或頁(yè)面間數(shù)據(jù)紊亂,
造成極大的隱患。示例如下:
public static string id; //在類Src 中定義公共靜態(tài)變量
Src.aspx:
id=TextBox1.Text;
Response.Redirect("Dst.aspx");
Dst.aspx:
Label1.Text=Src.id;
2.7 Cache 的使用
應(yīng)用程序中的緩存機(jī)制用于將需要大量服務(wù)器資源來(lái)創(chuàng)
建的對(duì)象存儲(chǔ)在內(nèi)存中,以此大大改進(jìn)應(yīng)用程序的性能。這
個(gè)機(jī)制同樣可以用來(lái)傳值。
與其他方法不同的是,該方法需要設(shè)置緩存項(xiàng)優(yōu)先級(jí)和
緩存時(shí)間。因?yàn)楫?dāng)系統(tǒng)內(nèi)存缺乏時(shí),緩存機(jī)制會(huì)自動(dòng)移除很
少使用或優(yōu)先級(jí)較低的項(xiàng),從而造成傳值失敗。
該方法的優(yōu)點(diǎn)是傳遞數(shù)據(jù)的大小和數(shù)量無(wú)限制,速度快。
缺點(diǎn)是緩存機(jī)制的操作相對(duì)比較復(fù)雜。
在 ASP.NET 中,緩存機(jī)制通過(guò)Cache 類實(shí)現(xiàn)。示例如下:
Src.aspx:
Cache["id"]=TextBox1.Text;
Response.Redirect("Dst.aspx");
Dst.aspx:
if(Cache["id"]!=null) Label1.Text=Cache["id"].ToString();
Cache.Remove("id"); //移除緩存項(xiàng)
如果 Cache["id"]為空,則傳值失敗。可使用如下方法實(shí)
—90—
現(xiàn)過(guò)期策略(以10 min 過(guò)期為例):
Cache.Insert("id",TextBox1.Text,null,
Cache.NoAbsoluteExpiration,new TimeSpan(0,10,0));
2.8 Context 的使用
Context 對(duì)象包含與當(dāng)前頁(yè)面相關(guān)的信息,提供對(duì)整個(gè)上
下文的訪問(wèn),包括請(qǐng)求、響應(yīng)、以及上文中的Session 和
Application 等信息??梢允褂么藢?duì)象在網(wǎng)頁(yè)之間共享信息,
從而實(shí)現(xiàn)頁(yè)面間的傳值。
與使用 Form 的方法類似,該方法也能保持大量的數(shù)據(jù),
缺點(diǎn)也相同,但使用方法相對(duì)比較簡(jiǎn)單。示例如下:
Src.aspx:
Context.Items["id"]=TextBox1.Text;
Server.Transfer("Dst.aspx");
Dst.aspx:
Label1.Text=Context.Items["id"].ToString();
Context.Items.Remove("id"); //移除項(xiàng)
2.9 ViewState 的使用
ViewState 是ASP.NET 用來(lái)在同一頁(yè)面的多個(gè)請(qǐng)求之間
保存和還原服務(wù)器控件視圖狀態(tài)的一種機(jī)制。與傳統(tǒng)的“同
一頁(yè)面”不同,ASP.NET 中“同一頁(yè)面”的每一個(gè)請(qǐng)求都會(huì)
導(dǎo)致服務(wù)器重新生成該頁(yè)面,但是新生成的頁(yè)面并不包含原
來(lái)頁(yè)面的數(shù)據(jù)。ViewState 的任務(wù)就是保存原來(lái)頁(yè)面中服務(wù)器
控件視圖狀態(tài)的數(shù)據(jù)供新頁(yè)面使用。從這個(gè)意義上講,
ViewState 也可以看作是一種在頁(yè)面間傳遞數(shù)據(jù)的工具。
ViewState 的工作原理是:作為一個(gè)隱藏的窗體字段在客
戶端和服務(wù)器之間傳遞,可見(jiàn),濫用ViewState 會(huì)加重頁(yè)面
回傳的負(fù)擔(dān),從而降低應(yīng)用程序的性能。此外,ViewState 也
能被控件、頁(yè)面和應(yīng)用程序禁用。示例如下(在同一頁(yè)面中):
ViewState["id"]=TextBox1.Text; //數(shù)據(jù)保存
Label1.Text=ViewState["id"].ToString(); //數(shù)據(jù)取出
ViewState.Remove("id"); //數(shù)據(jù)移除
2.10 Web.config 和Machine.config 的使用
Web.config 文件用來(lái)設(shè)置每個(gè)ASP.NET 應(yīng)用程序的一些
屬性,Machine.config 文件用來(lái)設(shè)置所有應(yīng)用程序基礎(chǔ)信息。
這 2 種文件保存的數(shù)據(jù)一般都很小,多為明文,特別適
合保存一些字符串常量, 如數(shù)據(jù)庫(kù)連接信息。此外,
Web.config 文件是可以擴(kuò)展的,因此,也可以用來(lái)傳遞變量。
因?yàn)檫@ 2 種文件會(huì)被自動(dòng)緩存,所以不存在因磁盤(pán)I/O
產(chǎn)生的性能瓶頸問(wèn)題。要注意的是文件中某些設(shè)置會(huì)導(dǎo)致文
件被修改后Web 應(yīng)用程序的重啟(詳情見(jiàn)文獻(xiàn)[4])。示例如下:
Src.aspx:
WebConfigurationManager.AppSettings.Set("id",
TextBox1.Text);
Dst.aspx:
Label1.Text=WebConfigurationManager.AppSettings["id"];
//數(shù)據(jù)移除
WebConfigurationManager.AppSettings.Remove("id");
2.11 其他方法
在其他方法中應(yīng)用最多最廣的就是數(shù)據(jù)庫(kù)了,比較常見(jiàn)
的還有文件。相對(duì)于數(shù)據(jù)庫(kù)來(lái)講,文件需要自定義格式,還
有可能因磁盤(pán)I/O 而產(chǎn)生性能瓶頸,設(shè)計(jì)和使用的工作量都
比較大,除非必要,很少應(yīng)用。
數(shù)據(jù)庫(kù)和文件在程序中應(yīng)用廣泛,幾乎可以存儲(chǔ)任何類
型、任何尺寸和數(shù)量的任何信息,而且可以永久保存。
考慮到數(shù)據(jù)庫(kù)和文件都是通用技術(shù),此處不作詳述。
對(duì)于其他傳值方法,或者應(yīng)用極少,或者是上述方法的
變種,這里不作討論。
3 比較與分析
基于以上論述,下面通過(guò)表 1 來(lái)簡(jiǎn)單比較和分析這些方
法的異同。
表1 傳值方法比較
傳值方法生命周期應(yīng)用范圍數(shù)據(jù)類型數(shù)據(jù)大小
使用QueryString 與目標(biāo)頁(yè)有關(guān)單用戶 字符串 1KB
使用Form 當(dāng)前請(qǐng)求單用戶 全部 不限
使用 Session 當(dāng)前會(huì)話單用戶 全部 不限
使用 Application 應(yīng)用程序全局 全部 不限
使用 Cookie 可自定義單用戶 字符串 4KB
使用Static 變量應(yīng)用程序全局 全部 不限
使用 Cache 可自定義全局 全部 不限
使用 Context 當(dāng)前請(qǐng)求單用戶 全部 不限
使用 ViewState 當(dāng)前頁(yè)單用戶 全部 不限
使用 Web.config 和
Machine.config
可永久全局 字符串 不限
使用數(shù)據(jù)庫(kù)或文件永久 全局 全部 不限
為了簡(jiǎn)化問(wèn)題的討論,此處不考慮權(quán)限管理和人為因素
的影響,因?yàn)樗鼈儠?huì)大大復(fù)雜化這些方法的應(yīng)用,對(duì)它們的
討論超出了本文的范圍。
表中的“當(dāng)前請(qǐng)求”指目標(biāo)頁(yè)的第1 次加載到目標(biāo)頁(yè)回
發(fā)操作或作廢前;“當(dāng)前會(huì)話”指用戶活動(dòng)時(shí)間+自定義延遲
時(shí)間;“應(yīng)用程序”指應(yīng)用程序的生命周期。數(shù)據(jù)大小的“不
限”并非指無(wú)限,因?yàn)橐艽鎯?chǔ)介質(zhì)的限制。在程序中動(dòng)態(tài)
寫(xiě)入Web.config 中的數(shù)據(jù)默認(rèn)不保存到該文件中,應(yīng)用程序
重啟后會(huì)消失。
通過(guò)前文的論述和上表的比較可以看出:傳遞無(wú)需保密
的簡(jiǎn)單數(shù)據(jù)使用QueryString 最方便;通過(guò)控件直接傳遞數(shù)據(jù)
只能使用Form;傳遞只與具體用戶有關(guān)的數(shù)據(jù)使用Session
最合適;要想在所有的用戶間共享數(shù)據(jù)使用Application 比較
方便,而共享數(shù)據(jù)如果是字符串常量則使用Web.config 也是
很好的選擇;Static 變量可以長(zhǎng)時(shí)間保持?jǐn)?shù)據(jù),而Cache 會(huì)自
動(dòng)清除數(shù)據(jù),Context 還具有訪問(wèn)請(qǐng)求、會(huì)話以及Application
的能力;如果要長(zhǎng)期保存數(shù)據(jù),則只能在Cookie、Web.config、
數(shù)據(jù)庫(kù)或文件之中選擇;除使用數(shù)據(jù)庫(kù)或文件之外,數(shù)據(jù)傳
遞速度都很快,只要設(shè)計(jì)得當(dāng),一般不會(huì)形成性能瓶頸。總
之,每種方法都有其自身的特點(diǎn)與優(yōu)勢(shì),實(shí)際應(yīng)用中選取何
種方法應(yīng)該根據(jù)具體情況具體分析,不能一概而論。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
列舉ASP.NET頁(yè)面之間傳遞值的幾種方式
ASP.NET頁(yè)面之間傳值的方法,我試過(guò)的有5種方法,現(xiàn)在總結(jié)如下:
Asp.net頁(yè)面之間的傳值 - Study
ASP.NET頁(yè)面?zhèn)髦档姆椒ê鸵恍?shí)用技巧
Asp.Net頁(yè)面之間傳值
ASP.NET的常用組件對(duì)象 - 博客文庫(kù) - 博客園
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服