亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

詳解ASP.NET 頁面之間傳值的幾種方式

2024-07-10 13:31:57
字體:
來源:轉載
供稿:網友

開篇概述

對于任何一個初學者來說,頁面之間傳值可謂是必經之路,卻又是他們的難點。其實,對大部分高手來說,未必不是難點。

回想2016年面試的將近300人中,有實習生,有應屆畢業生,有1-3年經驗的,有3-5年經驗的,有5-10年經驗的,對于所有的面試者,我幾乎問了同一道題:"請說說你所知道的頁面之間傳值的幾種形式和方法,并闡述他們的原理和過程",關于這道題,從大家的回答來看,結果并不是很理想,從種類上來說,大部分人回答5種左右,極少部分能回答8種,沒有超過8種的,但從深度上來說,很少有人能透徹的分析每種方法的原理和過程,(當然,要想透徹的分析這些原理和過程,需要研究底層的東西,如page 生命周期和page原理,反射,IIS如何解析請求等,CLR,GC,反編譯等)。

大致概括一下,ASP.NET 頁面之間傳遞值得方式大致可以分為如下幾種:Request.QueryString["name"],Request.Form("name"),Session,Cookie,Cache,Application,Server.Transfer,Database,HttpContext的Item屬性,Files,DataBase等等。

 詳解每種方法

一、Request.QueryString

核心代碼:

protected void getQueryString_Click(object sender, EventArgs e) {   string QueStr = Request.QueryString["name"];   Response.Write(QueStr); }

總結:

1、Request.QueryString:獲取http查詢字符串變量集合。有兩重載,即Request.QueryString[string name]和Request.QueryString[int index];

2、Request.QueryString主要是獲取url中的“?”之后的參數,如url:a.aspx?name="queryString",則Request.QueryString["name"]的值為“queryString”。

 二、Request.Form

 核心代碼:

protected void getQueryString_Click(object sender, EventArgs e) {   string strQueForm = Request.Form["TextBox1"];   Response.Write(strQueForm); }

總結:

1、Request.Form 獲取窗體變量集合。有兩重載,即Request.Form[string name]和Requst.Form[int index]。

2、獲取表單指定名字的參數值。

三、Session

1、Session基本操作

a、創建Session

//創建Session    public void createSession(string[] arrStr)    {      //創建數組      string[] str=new string[arrStr.Length];      for (int i = 0; i < arrStr.Length; i++)      {        str[i] = i.ToString();        Session[str[i]] = arrStr[i];      }    }

b、獲取Session的值

string getSessionValue=Session["name"].ToString();

c、遍歷Session 

//遍歷Session    public void getSession()    {      IEnumerator sessionEnum = Session.Keys.GetEnumerator();      while (sessionEnum.MoveNext())      {        Response.Write(Session[sessionEnum.Current.ToString()].ToString()+";");      }    }

 d、清空Session,但不結束會話

//清空Session,但不結束會話    public void clearSession()    {      Session.Clear();    }

e、結束Session會話

//結束Session會話    public void abandonSession()    {      Session.Abandon();    }

2、Session數據存放形式和位置 

<system.web> <sessionState mode="Off|InProc|StateServer|SQLServer" cookieless="true|false" timeout="number of minutes" stateConnectionString="tcpip=server:port" sqlConnectionString="sql connection string" stateNetworkTimeout="number of seconds"/></system.web>

注解:

mode:表示設置存儲Session形式和位置;

a、Off:禁用Session;

b、Inproc:In Process縮寫,表示將Session存儲在IIS進程內,但注意,該種方式雖然性能高,但IIS重啟是,丟失Session信息;(默認值)

c、SateServer:將Session存儲在ASP.NET狀態服務進程中(重新啟動Web運用程序時保留會話狀態,并使會話狀態可以用于網絡中的多個Web服務器);

d、將Session存儲在SQL Server中

cookieless:設置客戶端存儲Session形式和位置

a、true:使用cookieless模式,這時客戶端的Session信息就不再使用Cookie存儲了,而是將其通過URL存儲;

b、false:使用kookie模式,默認值。

timeout 設置經過多少分鐘后服務器自動放棄Session信息。默認為20分鐘;

stateConnectionString 設置將Session信息存儲在狀態服務中時使用的服務器名稱和端口號,例如:"tcpip=127.0.0.1:42424”。當mode的值是StateServer是,這個屬性是必需的。(默認端口42424);

sqlConnectionString 設置與SQL Server連接時的連接字符串。例如"data source=localhost;Integrated Security=SSPI;Initial Catalog=joye"。當mode的值是SQLServer時,這個屬性是必需的;

stateNetworkTimeout 設置當使用StateServer模式存儲Session狀態時,經過多少秒空閑后,斷開Web服務器與存儲狀態信息的服務器的TCP/IP連接的。默認值是10秒鐘;

 3、Session原理

 為什么引入Session?大家知道,因為http是一種無狀態協議,因此,Session正彌補了這一缺陷。當然,Session作用遠遠不止于這些,這里就不多論述。

Session在ASP.NET中,表示客戶端(Goggle,Firefox,IE等)與服務器端的會話,用來存儲特定會話信息,準確來說,是用來存儲特定用戶信息。當客戶端向服務器發送一個請求時,如登陸用戶ID,服務器接收到該請求,服務器端Session產生一個與該登陸用戶相關的SessionID,并將SessioID返回給客戶端(Goggle,Firefox,IE等),在新會話開始時,服務器將SessionID當做cookie存儲在用戶的瀏覽器中。

總結:

1、定義:System.Web.SessionState.HttpSessionState  Page.Session //獲取ASP.NET提供的當前Session對象。

2、特性:

a、Session中文意思為“會話”,在ASP.NET中,表示客戶端和服務器之間的會話,web中常用會話之一。

b、Session存儲在服務器端內存中。

c、Session可以存儲任何類型的數據,包括自定義對象。

d、Session與Session間是相互獨立的,互不干擾。

e、Session與Cookie配對使用,Session在服務器端產生SessionID,并將該SessionID返回給客戶端(IE,FireFox,Google等),客戶端Cookie來存儲該SessionID,整過會話過程中,只要保存SessionID的Cookie不丟失,則Session的信息就不會丟失。

f、Session保存的數據可以跨頁訪問,即跨頁面是全局的。

g、Session不能跨進程訪問,只能由該會話用戶訪問。

h、可以在不結束會話的條件下,清除Session信息,即調用Session.Clear();

i、當會話結束,過期,服務器就會清除Session對象。

j、Session常用于保存登錄用戶的ID. 

四、Application

核心代碼:

 (1)a.aspx

private void Button1_Click(object sender, System.EventArgs e) {   Application["name"] = Label1.Text; }

(2)b.aspx

private void Page_Load(object sender, EventArgs e) {   string name;   Application.Lock();   name = Application["name"].ToString();   Application.UnLock(); }

總結:

1、Application對象的作用范圍是整個全局,也就是說對所有用戶都有效。它在整個應用程序生命周期中都是有效的,類似于使用全局變量一樣,所以可以在不同頁面中對它進行存取。它和Session變量的區別在于,前者是所有的用戶共用的全局變量,后者是各個用戶獨有的全局變量。可能有人會問,既然所有用戶都可以使用application變量,那他可以用在什么場合呢?這里舉個例子:網站訪問數。多個請求訪問時都可以對它進行操作。

2、優點:使用簡單,消耗較少的服務器資源;不僅能傳遞簡單數據,還能傳遞對象;數據量大小是不限制的。

3、缺點:作為全局變量容易被誤操作。所以單個用戶使用的變量一般不能用application。

4、在源頁面的代碼中創建你需要傳遞的名稱和值構造Application變量:Application["name"]="Value(Or Object)";在目的頁面的代碼使用Application變量取出傳遞的值。Result = Application["name"]。

5、常用lock和unlock方法用來鎖定和解鎖,為了防止并發修改。 

五、Cache

核心代碼:

//Class1 Cache["id"] = TextBox1.Text; Response.Redirect("~/WebForm1.aspx");//Class2if (Cache["id"]!=null) {   Label1.Text = Cache["id"].ToString(); }//移除緩存Cache.Remove("id");//如果 Cache["id"]為空,則傳值失敗。可使用如下方法實//限期為10分鐘 Cache.Insert("id",TextBox1.Text,null,Cache.NoAbsoluteExpiration,new TimeSpan(0,10,0));

總結:

1、應用程序中的緩存機制用于將需要大量服務器資源來創建的對象存儲在內存中,以此大大改進應用程序的性能。這個機制同樣可以用來傳值。

2、與其他方法不同的是,該方法需要設置緩存項優先級和緩存時間。因為當系統內存缺乏時,緩存機制會自動移除很少使用或優先級較低的項,從而造成傳值失敗。

3、該方法的優點是傳遞數據的大小和數量無限制,速度快。缺點是緩存機制的操作相對比較復雜。

六、Cookie

 核心代碼: 

//Class1HttpCookie httpCookie = new HttpCookie("testCookie","Page transfers by Cookie");Response.Redirect("~/Class2.aspx");//Class2Label1.Text = Request.Cookies["testCookie"].Value;

總結:

1、Cookie用于在用戶瀏覽器上存儲小塊的信息,保存用戶的相關信息,比如用戶訪問某網站時用戶的ID,用戶的偏好等,用戶下次訪問就可以通過檢索獲得以前的信息。所以Cookie也可以在頁面間傳遞值。

2、Cookie通過HTTP頭在瀏覽器和服務器之間來回傳遞的。Cookie只能包含字符串的值,如果想在Cookie存儲整數值,那么需要先轉換為字符串的形式。

3、與Session一樣,其是什對每一個用戶而言的,但是有個本質的區別,即Cookie是存放在客戶端的,而session是存放在服務器端的。而且Cookie的使用要配合ASP.NET內置對象Request來使用。

4、使用簡單,是保持用戶狀態的一種非常常用的方法。比如在購物網站中用戶跨多個頁面表單時可以用它來保持用戶狀態。

5、常常被人認為用來收集用戶隱私而遭到批評。

6、安全性不高,容易偽造。 

七、Context.Items["id"]

核心代碼:

//Class1 Context.Items["id"]=TextBox1.Text; Server.Transfer("~/Class2.aspx");//Class2 Label1.Text=Context.Items["id"].ToString(); Context.Items.Remove("id"); //移除項

1、Context 對象包含與當前頁面相關的信息,提供對整個上下文的訪問,包括請求、響應、以及上文中的Session 和Application 等信息。

2、可以使用此對象在網頁之間共享信息,從而實現頁面間的傳值。

3、與使用 Form 的方法類似,該方法也能保持大量的數據,缺點也相同,但使用方法相對比較簡單。

八、ViewState

核心代碼:

//Class1ViewState["id"]=TextBox1.Text; //數據保存Label1.Text=ViewState["id"].ToString(); //數據取出ViewState.Remove("id"); //數據移除

總結:

1、ViewState 是ASP.NET 用來在同一頁面的多個請求之間保存和還原服務器控件視圖狀態的一種機制。與傳統的“同一頁面”不同,ASP.NET 中“同一頁面”的每一個請求都會導致服務器重新生成該頁面,但是新生成的頁面并不包含原來頁面的數據。(頁面無狀態性)

2、ViewState 的任務就是保存原來頁面中服務器控件視圖狀態的數據供新頁面使用。從這個意義上講,ViewState 也可以看作是一種在頁面間傳遞數據的工具。

3、ViewState 的工作原理是:作為一個隱藏的窗體字段在客戶端和服務器之間傳遞,可見,濫用ViewState 會加重頁面回傳的負擔,從而降低應用程序的性能。

此外,ViewState 也能被控件、頁面和應用程序禁用。

九、web.config和machine.config

核心代碼:

//Class1using System.Web.Configuration;WebConfigurationManager.AppSettings.Set("userName",TextBox1.Text);Response.Redirect("~/Class2.aspx");//Class2using System.Web.Configuration;Label1.Text = WebConfigurationManager.AppSettings["userName"];

總結:

1、每個Web運用程序繼承web.config文件和machine.config文件的設置。

2、web.config和machine.config這兩種文件保存數據一般都很小,多為明文,特別適合保存一些字符串常量,如數據庫連接信息。此外,web.config文件是可以擴展的,因此,也可以用來傳遞變量。由于這兩種文件會被自動緩存,所以不存在因磁盤IO產生的性能瓶頸等問題。要注意的是文件中某些設置會導致文件被修改后Web運用程序的重啟。

3、web.config:你可以向單個Web運用程序運用設置。例如,你可能會希望設置特定的驗證方法、調試的類型、默認語言或自定義的錯誤頁面。但如果你要使用這些設置,必須把web.config文件放到web運用程序的根虛擬目錄下。要想在Web運用程序中進一步配置自己的子目錄,需要 在這些文件夾中放置附加的web.config。(關于ASP.NET web.config文件詳細介紹,可參考我另外一篇博客:ASP.NET web.config)

4、machine.config:從c:/Windows/Microsoft.NET/Framework/Framework/[Version]/Config目錄中的一個叫macine.config的文件開始 配置。machine.config文件定義支持的配置文件節,配置ASP.NET工作者進程,注冊可用于高級特性(如配置文件、成員資格以及基于角色的安全等)提供程序。(關于ASP.NET machine.config文件的詳細介紹,我之后會寫一篇文章來介紹)     

 十、Static

核心代碼:

//class1public static string userName;//在class1中定義靜態全局變量userName=txtBoxUserName.Text;Response.Redirect("~/class2.aspx");//class2Label1.Text=Src.id;

總結:

1、這個應該是非常容易理解的,在ASP.NET中,每個頁面對應一個具體的類,既然如此,那么頁面之間的傳遞,我們就可以歸結為:類與類之間數據的傳遞。想到這一步,問題應該就迎刃而解了, 因為我們可以利用類之間的公關靜態變量來解決這個問題。

2、若合理利用,可以有效地提高數據傳遞效率,但若濫用,可能會導致用戶或頁面間數據紊亂,存在一定風險和隱患,應謹慎使用。

提出以下問題:大家可以分析一下,以下代碼有什么問題?

//Class1 protected void btnRedirect_Click(object sender, EventArgs e)    {             string userName = txtBoxUserName.Text;      Response.Redirect("~/Class2.aspx");    }//Class2Lable1.Text=userName;

十一、補充常用頁面之間跳轉

1.最常用的頁面跳轉(原窗口被替代):Response.Redirect("XXX.aspx");

2.利用url地址打開本地網頁或互聯網:Respose.Write("<script language='javascript'>window.open('"+ url+"');</script>");

3.原窗口保留再新打開另一個頁面(瀏覽器可能阻止,需要解除):Response.Write("<script>window.open('XXX.aspx','_blank')</script>");

4.效果同1中的另一種寫法:Response.Write("<script>window.location='XXX.aspx'</script>");

5.也是原窗口被替代的 (常用于傳遞session變量的頁面跳轉):Server.Transfer("XXX.aspx");

6.原窗口保留,以對話框形式打開新窗口:Response.Write("<script>window.showModelessDialog('XXX.aspx')</script>");

7.對話框形式打開新窗口,原窗口被代替:Response.Write("<script>window.showModelDialog('XXX.aspx')</script>");

8.打開簡潔窗口:Respose.Write("<script language='javascript'>window.open('"+url+"','','resizable=1,scrollbars=0,status=1,menubar=no,toolbar=no,location=no, menu=no');</script>");

9.利用vs2008端口:System.Diagnostics.Process.Start(http://localhost:3210/系統管理員.aspx);

注釋:比較簡單,我這里就不論述了。

總結:

關于頁面之間傳值,還有很多方法,如文件傳值、數據庫傳值,ViewBag等等,在這里就不一一論述了。若以后有時間,將會在此基礎上補充,并逐步完善該篇博文。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩免费观看网站| 国产aⅴ夜夜欢一区二区三区| 欧美性猛交xxxx免费看漫画| 欧美亚洲视频在线看网址| 中文字幕亚洲专区| 一区二区三区视频观看| 国产精品久久久久久搜索| 正在播放亚洲1区| 国产美女扒开尿口久久久| 欧美激情视频播放| 久久成人18免费网站| 亚洲最新av在线网站| 欧美电影免费观看电视剧大全| 欧美大片va欧美在线播放| 992tv在线成人免费观看| 国产精品十八以下禁看| 亚洲娇小xxxx欧美娇小| 亚洲区中文字幕| 国产亚洲欧美视频| 国产视频久久网| 日韩中文字幕在线免费观看| 亚洲成年人影院在线| 亚洲欧美日韩天堂一区二区| 日韩在线视频一区| 亚洲深夜福利在线| 中文字幕自拍vr一区二区三区| 亚洲丁香婷深爱综合| 久久99精品国产99久久6尤物| 国产在线视频91| 国产激情999| 欧美国产精品人人做人人爱| 亚洲国产精品成人精品| 国产精品成人免费电影| 国产精品精品一区二区三区午夜版| 国产精品成久久久久三级| 欧美大全免费观看电视剧大泉洋| 欧美老女人www| 韩国精品美女www爽爽爽视频| 日韩欧美亚洲成人| 亚洲国产精品久久精品怡红院| 欧美成人一区二区三区电影| 欧美日韩国内自拍| 国产精品88a∨| 国产精品一二三视频| 欧美高清电影在线看| 日韩高清av一区二区三区| 日韩在线观看免费高清完整版| 亚洲成人久久久| 在线视频免费一区二区| 国产日韩在线观看av| 亚洲国产99精品国自产| 久久久久久久999精品视频| 国内精品久久久久久久久| 欧美丰满少妇xxxxx做受| 91av视频在线观看| 亚洲伦理中文字幕| 国产精品免费久久久| 永久555www成人免费| 久久久精品免费| 国内精品免费午夜毛片| 日韩在线观看网址| 国产精品久久久久久久久久久久| 亚洲欧美另类人妖| 国产91精品久| 91精品国产九九九久久久亚洲| 亚洲最大中文字幕| 日韩av一区在线| 国产精欧美一区二区三区| 久久精品视频一| 成人免费午夜电影| 亚洲最大福利网站| 成人信息集中地欧美| 欧美国产日韩二区| 国内精品国产三级国产在线专| 亚洲片国产一区一级在线观看| 精品日本美女福利在线观看| 久久久久久国产精品美女| 欧美成人三级视频网站| 欧美激情视频一区二区三区不卡| 久久av资源网站| 欧美激情影音先锋| 日韩美女视频在线观看| 精品久久久久久电影| 超碰精品一区二区三区乱码| 91精品成人久久| xxx欧美精品| 亚洲国产一区自拍| 欧美成人午夜视频| 久久五月天综合| 亚洲精品成a人在线观看| 亚洲精品视频二区| 亚洲jizzjizz日本少妇| 国产精品中文字幕久久久| 久久在线免费视频| xxxx欧美18另类的高清| 一区二区在线视频| 97热精品视频官网| 精品视频在线播放| 亚洲国产一区二区三区在线观看| 九九热精品视频在线播放| 欧美成人激情视频免费观看| 中文字幕亚洲国产| 久久中文字幕视频| 久久久伊人欧美| 久久久综合免费视频| 亚洲欧美精品在线| 欧美视频裸体精品| 九九精品在线视频| 97在线视频精品| 成人久久久久久| 92看片淫黄大片看国产片| 国产精品99蜜臀久久不卡二区| 日韩一区二区精品视频| 国产精品三级在线| 亚洲永久在线观看| 欧美裸身视频免费观看| 欧美在线精品免播放器视频| 亚洲最大的成人网| 国产精品久久久久久av下载红粉| 日韩精品中文字幕视频在线| 亚洲美女视频网| 久久免费少妇高潮久久精品99| 欧美黑人xxx| 最近2019中文字幕第三页视频| 国产日韩视频在线观看| 国产精品一区二区久久久久| 久久精品这里热有精品| 亚洲高清在线观看| 日韩欧中文字幕| 欧美激情视频网| 国产精品视频男人的天堂| 91在线视频九色| 久久婷婷国产麻豆91天堂| 欧美电影在线免费观看网站| 午夜精品国产精品大乳美女| 欧美激情视频给我| 日韩在线观看成人| 91夜夜揉人人捏人人添红杏| 精品夜色国产国偷在线| 国产视频自拍一区| 久久99热这里只有精品国产| 亚洲美女av在线| 欧美天天综合色影久久精品| 亚洲欧美在线x视频| 精品精品国产国产自在线| 奇米4444一区二区三区| 色综合男人天堂| 欧美在线播放视频| 国产精品美女999| 美女啪啪无遮挡免费久久网站| 91精品一区二区| 欧美大奶子在线| 精品福利在线观看| 亚洲色在线视频| 久久91精品国产91久久久| 在线成人中文字幕| 欧美精品福利在线| 亚洲欧美精品一区| 久久在精品线影院精品国产| 亚洲女人天堂色在线7777| 日韩精品极品在线观看播放免费视频| 欧亚精品中文字幕| 精品久久久久久久久久久久久| 色久欧美在线视频观看|