ASP.NET中怎么實(shí)現(xiàn)頁面間傳值-創(chuàng)新互聯(lián)

ASP.NET 中怎么實(shí)現(xiàn)頁面間傳值,很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的于田網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

一、Request.QueryString

核心代碼:

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

總結(jié):

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

2、Request.QueryString主要是獲取url中的“?”之后的參數(shù),如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);
 }

總結(jié):

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

2、獲取表單指定名字的參數(shù)值。

三、Session

1、Session基本操作

a、創(chuàng)建Session

//創(chuàng)建Session
    public void createSession(string[] arrStr)
    {
      //創(chuàng)建數(shù)組
      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,但不結(jié)束會話

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

e、結(jié)束Session會話

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

2、Session數(shù)據(jù)存放形式和位置

<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:表示設(shè)置存儲Session形式和位置;

a、Off:禁用Session;

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

c、SateServer:將Session存儲在ASP.NET狀態(tài)服務(wù)進(jìn)程中(重新啟動Web運(yùn)用程序時(shí)保留會話狀態(tài),并使會話狀態(tài)可以用于網(wǎng)絡(luò)中的多個(gè)Web服務(wù)器);

d、將Session存儲在SQL Server中

cookieless:設(shè)置客戶端存儲Session形式和位置

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

b、false:使用kookie模式,默認(rèn)值。

timeout 設(shè)置經(jīng)過多少分鐘后服務(wù)器自動放棄Session信息。默認(rèn)為20分鐘;

stateConnectionString 設(shè)置將Session信息存儲在狀態(tài)服務(wù)中時(shí)使用的服務(wù)器名稱和端口號,例如:"tcpip=127.0.0.1:42424”。當(dāng)mode的值是StateServer是,這個(gè)屬性是必需的。(默認(rèn)端口42424);

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

stateNetworkTimeout 設(shè)置當(dāng)使用StateServer模式存儲Session狀態(tài)時(shí),經(jīng)過多少秒空閑后,斷開Web服務(wù)器與存儲狀態(tài)信息的服務(wù)器的TCP/IP連接的。默認(rèn)值是10秒鐘;

 3、Session原理

 為什么引入Session?大家知道,因?yàn)閔ttp是一種無狀態(tài)協(xié)議,因此,Session正彌補(bǔ)了這一缺陷。當(dāng)然,Session作用遠(yuǎn)遠(yuǎn)不止于這些,這里就不多論述。

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

總結(jié):

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

2、特性:

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

b、Session存儲在服務(wù)器端內(nèi)存中。

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

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

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

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

g、Session不能跨進(jìn)程訪問,只能由該會話用戶訪問。

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

i、當(dāng)會話結(jié)束,過期,服務(wù)器就會清除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(); 
}

總結(jié):

1、Application對象的作用范圍是整個(gè)全局,也就是說對所有用戶都有效。它在整個(gè)應(yīng)用程序生命周期中都是有效的,類似于使用全局變量一樣,所以可以在不同頁面中對它進(jìn)行存取。它和Session變量的區(qū)別在于,前者是所有的用戶共用的全局變量,后者是各個(gè)用戶獨(dú)有的全局變量??赡苡腥藭?,既然所有用戶都可以使用application變量,那他可以用在什么場合呢?這里舉個(gè)例子:網(wǎng)站訪問數(shù)。多個(gè)請求訪問時(shí)都可以對它進(jìn)行操作。

2、優(yōu)點(diǎn):使用簡單,消耗較少的服務(wù)器資源;不僅能傳遞簡單數(shù)據(jù),還能傳遞對象;數(shù)據(jù)量大小是不限制的。

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

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

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

五、Cache

核心代碼:

//Class1

 Cache["id"] = TextBox1.Text;
 Response.Redirect("~/WebForm1.aspx");

//Class2

if (Cache["id"]!=null)
 {
   Label1.Text = Cache["id"].ToString();
 }

//移除緩存
Cache.Remove("id");

//如果 Cache["id"]為空,則傳值失敗??墒褂萌缦路椒▽?shí)
//限期為10分鐘
 Cache.Insert("id",TextBox1.Text,null,Cache.NoAbsoluteExpiration,new TimeSpan(0,10,0));

總結(jié):

1、應(yīng)用程序中的緩存機(jī)制用于將需要大量服務(wù)器資源來創(chuàng)建的對象存儲在內(nèi)存中,以此大大改進(jìn)應(yīng)用程序的性能。這個(gè)機(jī)制同樣可以用來傳值。

2、與其他方法不同的是,該方法需要設(shè)置緩存項(xiàng)優(yōu)先級和緩存時(shí)間。因?yàn)楫?dāng)系統(tǒng)內(nèi)存缺乏時(shí),緩存機(jī)制會自動移除很少使用或優(yōu)先級較低的項(xiàng),從而造成傳值失敗。

3、該方法的優(yōu)點(diǎn)是傳遞數(shù)據(jù)的大小和數(shù)量無限制,速度快。缺點(diǎn)是緩存機(jī)制的操作相對比較復(fù)雜。

六、Cookie

 核心代碼:

//Class1

HttpCookie httpCookie = new HttpCookie("testCookie","Page transfers by Cookie");
Response.Redirect("~/Class2.aspx");
//Class2

Label1.Text = Request.Cookies["testCookie"].Value;

總結(jié):

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

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

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

4、使用簡單,是保持用戶狀態(tài)的一種非常常用的方法。比如在購物網(wǎng)站中用戶跨多個(gè)頁面表單時(shí)可以用它來保持用戶狀態(tài)。

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

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"); //移除項(xiàng)

1、Context 對象包含與當(dāng)前頁面相關(guān)的信息,提供對整個(gè)上下文的訪問,包括請求、響應(yīng)、以及上文中的Session 和Application 等信息。

2、可以使用此對象在網(wǎng)頁之間共享信息,從而實(shí)現(xiàn)頁面間的傳值。

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


八、ViewState

核心代碼:

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

總結(jié):

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

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

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

此外,ViewState 也能被控件、頁面和應(yīng)用程序禁用。

九、web.config和machine.config

核心代碼:

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

總結(jié):

1、每個(gè)Web運(yùn)用程序繼承web.config文件和machine.config文件的設(shè)置。

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

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

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

 十、Static

核心代碼:

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

總結(jié):

1、這個(gè)應(yīng)該是非常容易理解的,在ASP.NET中,每個(gè)頁面對應(yīng)一個(gè)具體的類,既然如此,那么頁面之間的傳遞,我們就可以歸結(jié)為:類與類之間數(shù)據(jù)的傳遞。想到這一步,問題應(yīng)該就迎刃而解了, 因?yàn)槲覀兛梢岳妙愔g的公關(guān)靜態(tài)變量來解決這個(gè)問題。

2、若合理利用,可以有效地提高數(shù)據(jù)傳遞效率,但若濫用,可能會導(dǎo)致用戶或頁面間數(shù)據(jù)紊亂,存在一定風(fēng)險(xiǎn)和隱患,應(yīng)謹(jǐn)慎使用。

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

//Class1

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

//Class2

Lable1.Text=userName;

十一、補(bǔ)充常用頁面之間跳轉(zhuǎn)

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

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

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

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

5.也是原窗口被替代的 (常用于傳遞session變量的頁面跳轉(zhuǎn)):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/系統(tǒng)管理員.aspx);

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,的支持。


當(dāng)前標(biāo)題:ASP.NET中怎么實(shí)現(xiàn)頁面間傳值-創(chuàng)新互聯(lián)
文章路徑:http://muchs.cn/article34/csgppe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版標(biāo)簽優(yōu)化、企業(yè)網(wǎng)站制作小程序開發(fā)、定制開發(fā)、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)