ASP.Net中頁面傳值的幾種方式

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

一、Request.QueryString

視圖頁面直接獲取url get傳值,1.@Request.QueryString["look"]2.@ViewContext.RequestContext.HttpContext.Request.Params["look"]
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

//a、創建Sessionpublic 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
public void getSession(){IEnumerator sessionEnum = Session.Keys.GetEnumerator();while (sessionEnum.MoveNext()){Response.Write(Session[sessionEnum.Current.ToString()].ToString()+";");}}//d、清空Session,但不結束會話public void clearSession(){Session.Clear();}//e、結束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.aspxprivate void Button1_Click(object sender, System.EventArgs e) 
{ Application["name"] = Label1.Text; 
}
(2)b.aspxprivate 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

//Class1

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

Label1.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");//Class2Label1.Text=Context.Items["id"].ToString();Context.Items.Remove("id"); //移除項

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

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

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

?

八、ViewState

//Class1
ViewState["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

//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"];

總結:

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

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

總結:

1、這個應該是非常容易理解的,在ASP.NET中,每個頁面對應一個具體的類,既然如此,那么頁面之間的傳遞,我們就可以歸結為:類與類之間數據的傳遞。想到這一步,問題應該

就迎刃而解了, 因為我們可以利用類之間的公關靜態變量來解決這個問題。

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

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

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

Lable1.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);

轉載于:https://www.cnblogs.com/jetdl/p/8890413.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251911.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251911.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251911.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Win 10 源碼一覽:0.5T 代碼、400 萬文件、50 萬文件夾

Windows 操作系統本身是不開源的&#xff0c;但是近日微軟內核工程師 Axel Rietschin 發表了一篇博客&#xff0c;帶大家一窺了 Windows 10 內核的魅力。 Axel 介紹&#xff0c;Windows 10 與 Windows 8.x、7、Vista、XP、2000 和 NT 的代碼庫是相同的&#xff0c;其中每一代都…

老齊python-基礎3(列表)

1、定義一個列表 >>> a [] #創建一個空列表 >>> type(a) #查看數據類型 <class list> >>> bool(a) #判斷非空 False >>> print(a) [] >>> a [2,3,tajzhang,] >>> a [2, 3, tajzhang] >&…

UWP 響應鍵盤組合快捷鍵

方法1&#xff1a;響應Ctrl&#xff1f;快捷鍵 首先在load事件或者keydown事件內注冊事件 public MainPage(){this.InitializeComponent();// Register for accelerator key events used for button hotkeysWindow.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated Dis…

NDK 開發實戰 - 封裝 java 層 sdk 模型

關于 Ndk 開發&#xff0c;網上的資料比較少&#xff0c;這方面的書籍也不多。因為其涉及的知識非常廣&#xff0c;時常有哥們問我&#xff0c;東西那么多到底要學到什么程度呢&#xff1f;到底應該怎么學&#xff1f;這期我給大家來做一個簡單回答&#xff0c;首先單純站在 An…

JDK+Tomcat搭建JSP運行環境--JSP基礎

一、搭建JSP運行環境之前需要了解的基本知識 配置JSP運行環境之前&#xff0c;我們需要了解JSP的運行機制。只有了解JSP運行機制后&#xff0c;我們才能知道為什么要搭建JSP運行環境?如何去搭建JSP運行環境?為什么要配置Tomcat、JDK&#xff1f; JSP(Java Sever Page)即Java服…

Docker容器的自動化監控實現

本文由 網易云 發布。 近年來容器技術不斷成熟并得到應用。Docker作為容器技術的一個代表&#xff0c;目前也在快速發展中&#xff0c;基于 Docker的各種應用也正在普及&#xff0c;與此同時 Docker對傳統的運維體系也帶來了沖擊。我們在建設運維平臺的過程中&#xff0c;也需…

robotframework 常用關鍵字

標準庫 第三方庫 其他庫轉載于:https://www.cnblogs.com/Chamberlain/p/10729054.html

身份證的驗證

var Wi [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ]; // 加權因子 var ValideCode [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]; // 身份證驗證位值.10代表X function checkIdcard(idCard) { idCard trim(idCard);//去掉字符串頭尾空格 if (idCard.length 15…

人工智能實戰小程序之語音_前端開發

1. 人工智能實戰小程序之準備工作 2. 人工智能實戰小程序之語音_前端開發 今天這部分主要講小程序前端功能的開發由于我偏后端&#xff0c;css是我的弱項&#xff0c;可能很多人和我一樣開發小程序不知道如何下手&#xff0c;希望本篇文章對你有幫助我的學習路線是&#xff1a;…

當TFS/VSTS遇上Power BI

引言眾所周知&#xff0c;要對TFS進行深入的圖表分析&#xff0c;往往需要依賴于SQL Server Analysis Service和SQL Server Reporting Service。雖然隨著TFS對敏捷項目的支持&#xff0c;內置了諸如累積流圖、燃盡圖等快捷圖表&#xff1b;并且在最新的版本中還可以在儀表盤和查…

HashMap深度解析:一文讓你徹底了解HashMap

寫在前面HashMap是Map族中最為常用的一種&#xff0c;也是 Java Collection Framework 的重要成員。本文首先給出了 HashMap 的實質并概述了其與 Map、HashSet 的關系&#xff0c;緊接著給出了 HashMap 在 JDK 中的定義&#xff0c;并結合源碼分析了其四種構造方式。最后&#…

Bzoj3628: [JLOI2014]天天酷跑

3628: [JLOI2014]天天酷跑 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 121 Solved: 44[Submit][Status][Discuss]Description 在游戲天天酷跑中&#xff0c;最爽的應該是超級獎勵模式了吧&#xff0c;沒有一切障礙&#xff0c;可以盡情的吃金幣&#xff0c;現在請你控制…

python_線程、進程和協程

線程 Threading用于提供線程相關的操作&#xff0c;線程是應用程序中工作的最小單元。 1 #!/usr/bin/env python2 #codingutf-83 __author__ yinjia4 5 6 import threading,time7 8 def show(arg):9 time.sleep(2) 10 print(線程: str(arg)) 11 12 for i in range(…

AppDelegate瘦身之服務化

有沒有覺得你的AppDelegate雜亂無章&#xff1f;代碼幾百行上千行&#xff1f;集成了無數的功能&#xff0c;如推送、埋點、日志統計、Crash統計等等&#xff0c;感覺AppDelegate無所不能。 來一段一般的AppDelegate代碼&#xff0c;來自網上一篇文章&#xff1a; UIApplicatio…

第四章:手機平板要兼顧-探究碎片

碎片是什么&#xff1f; 碎片&#xff08;Fragment&#xff09;是一種可以嵌入在活動&#xff08;Activity&#xff09;中的 UI 片段&#xff0c;它能讓程序更加合理和充分的利用大屏幕的空間&#xff0c;因而在平板上應用的非常廣泛。 碎片的使用方式 靜態嵌入動態加載碎片和活…

Android Studio 3.4增可視化資源管理工具 可管理和預覽項目資源

經過6個月的開發時間&#xff0c;網絡大廠17日發布了最新版的App開發IDE Android Studio 3.4&#xff0c;現在就能夠下載使用&#xff0c;除了有超過300個錯誤修護和穩定度增強之外&#xff0c;在開發、建置和測試App階段&#xff0c;都推出了一些小的新功能和工具&#xff0c;…

Python安裝、使用MySQL數據庫

本機安裝的python版本為Python 2.7(win32 bit) 從http://www.codegood.com/archives/129下載MySQL-python-1.2.3.win32-py2.7.exe&#xff0c;點擊安裝 如果是win版還需要下載&#xff1a;libguide40.dll 和 libmmd.dll這兩個文件&#xff0c;下載后放入到到C:\WINDOWS/syste…

pytorch 安裝

安裝pytorch時&#xff0c;官網不能選擇版本。原以為是瀏覽器問題&#xff0c;換了幾個瀏覽器都不行。 后來FQ之后&#xff0c;就能選擇版本了。 sudo pip install torch torchvision轉載于:https://www.cnblogs.com/rabitvision/p/8908757.html

《JavaScript 高級程序設計》精讀筆記

本系列讀書筆記是我通過學習《Javascript 高級程序設計》第3版時結合自己的理解、概括、精煉然后加以一定的拓展&#xff0c;總結而來的&#xff0c;非常適合具有一定基礎&#xff0c;同時又想把 JS 基礎學更好的童鞋&#xff0c;當然更希望得到大家的反饋于建議&#xff0c;比…

struts2實現文件查看、下載

CreateTime--2017年9月7日10:25:33 Author:Marydon struts2實現文件查看、下載 1.界面展示 <a style"color: #199ED8;" target"_blank" href"<c:url value"/telemedicine/reseCons/viewFile.do?fileName201516529IO.jpg"/>"…