版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、ASP.NET頁面之間傳遞值的幾種方式頁面?zhèn)髦凳菍W習初期都會面臨的一個問題,總的來說有頁面?zhèn)髦?、存儲對象傳值、ajax、類、model、表單等。但是一般來說,常用的較簡單有QueryString,Session,Cookies,Application,Server.Transfer。 一、QueryString1二、Session2三、Cookie2四、Application3五、Server.Transfer4六、表單提交5七、viewstate7八、 PostBackUrl()方法(類似于form的post方式和server.transfer方式)8一、QueryString
2、QueryString是一種非常簡單的傳值方式,他可以將傳送的值顯示在瀏覽器的地址欄中。如果是傳遞一個或多個安全性要求不高或是結構簡單的數值時,可以使用這個方法。但是對于傳遞數組或對象的話,就不能用這個方法了。這種方法的優(yōu)點:1.使用簡單,對于安全性要求不高時傳遞數字或是文本值非常有效。這種方法的缺點:1.缺乏安全性,由于它的值暴露在瀏覽器的URL地址中的。2.不能傳遞對象。使用方法:1.在源頁面的代碼中用需要傳遞的名稱和值構造URL地址。2.在源頁面的代碼用Response.Redirect(URL);重定向到上面的URL地址中。3.在目的頁面的代碼使用Request.QueryString
3、name;取出URL地址中傳遞的值。例子:(1)a.aspx /發(fā)送頁面private void Button1_Click(object sender, System.EventArgs e) string s_url; s_url = b.aspx?name= + Label1.Text; Response.Redirect(s_url); (2)b.aspx /接收頁面private void Page_Load(object sender, EventArgs e) Label2.Text = Request.QueryStringname; 二、Session想必這個肯定是大家使用中
4、最常見的用法了,其操作與Application類似,作用于用戶個人,所以,過量的存儲會導致服務器內存資源的耗盡。優(yōu)點:1.使用簡單,不僅能傳遞簡單數據類型,還能傳遞對象。2.數據量大小是不限制的。缺點:1.在Session變量存儲大量的數據會消耗較多的服務器資源。2.容易丟失。使用方法:1.在源頁面的代碼中創(chuàng)建你需要傳遞的名稱和值構造Session變量:SessionName=Value(Or Object);2.在目的頁面的代碼使用Session變量取出傳遞的值。Result = SessionNmae注意:session不用時可以銷毀它,銷毀的方法是:清除一個:Session.Remove
5、(session名);清除所有:Session.Clear();例子:(1)a.aspx /發(fā)送頁面private void Button1_Click(object sender, System.EventArgs e) Sessionname = Label.Text; (2)b.aspx /接收頁面private void Page_Load(object sender, EventArgs e) string name; name = Sessionname.ToString(); 三、Cookie這個也是大家常使用的方法,Cookie用于在用戶瀏覽器上存儲小塊的信息,保存用戶的相關信
6、息,比如用戶訪問某網站時用戶的ID,用戶的偏好等,用戶下次訪問就可以通過檢索獲得以前的信息。所以Cookie也可以在頁面間傳遞值。Cookie通過HTTP頭在瀏覽器和服務器之間來回傳遞的。Cookie只能包含字符串的值,如果想在Cookie存儲整數值,那么需要先轉換為字符串的形式。與Session一樣,其是什對每一個用戶而言的,但是有個本質的區(qū)別,即Cookie是存放在客戶端的,而session是存放在服務器端的。而且Cookie的使用要配合ASP.NET內置對象Request來使用。優(yōu)點:1.使用簡單,是保持用戶狀態(tài)的一種非常常用的方法。比如在購物網站中用戶跨多個頁面表單時可以用它來保持用戶
7、狀態(tài)。缺點:1.常常被人認為用來收集用戶隱私而遭到批評。2.安全性不高,容易偽造。寫值: Response.Cookieshsha = TextBox1.Text; Response.Cookieshshb = TextBox2.Text;讀值: if (Request.Cookieshsh != null) TextBox1.Text = Request.Cookieshsh.Valuesa.ToString(); TextBox2.Text = Request.Cookieshsh.Valuesb.ToString(); 四、ApplicationApplication對象的作用范圍是整個
8、全局,也就是說對所有用戶都有效。它在整個應用程序生命周期中都是有效的,類似于使用全局變量一樣,所以可以在不同頁面中對它進行存取。它和Session變量的區(qū)別在于,前者是所有的用戶共用的全局變量,后者是各個用戶獨有的全局變量。可能有人會問,既然所有用戶都可以使用application變量,那他可以用在什么場合呢?這里舉個例子:網站訪問數。多個請求訪問時都可以對它進行操作。優(yōu)點:1.使用簡單,消耗較少的服務器資源。2.不僅能傳遞簡單數據,還能傳遞對象。3.數據量大小是不限制的。缺點:1.作為全局變量容易被誤操作。所以單個用戶使用的變量一般不能用application。使用方法:1.在源頁面的代碼中
9、創(chuàng)建你需要傳遞的名稱和值構造Application變量:ApplicationNmae=Value(Or Object);2.在目的頁面的代碼使用Application變量取出傳遞的值。Result = ApplicationNmae注意:常用lock和unlock方法用來鎖定和解鎖,為了防止并發(fā)修改。例子:(1)a.aspx /發(fā)送頁面private void Button1_Click(object sender, System.EventArgs e) Applicationname = Label1.Text; (2)b.aspx /接收頁面private void Page_Load
10、(object sender, EventArgs e) string name; Application.Lock(); name = Applicationname.ToString(); Application.UnLock(); 五、Server.Transfer這個才可以說是面象對象開發(fā)所使用的方法,其使用Server.Transfer方法把流程從當前頁面引導到另一個頁面中,新的頁面使用前一個頁面的應答流,所以這個方法是完全面象對象的,簡潔有效。Server.Transfer是從當前的ASPX頁面轉到新的ASPX頁面,服務器端執(zhí)行新頁并輸出,在新頁面中通過Context.Handle
11、r來獲得前一個頁面?zhèn)鬟f的各種數據類型的值、表單數據、QueryString.由于重定向完全在服務器端完成,所以客戶端瀏覽器中的URL地址是不會改變的。調用Server.Transfer時,當前的ASPX頁面終止執(zhí)行,執(zhí)行流程轉入另一個ASPX頁面,但新的ASPX頁面仍使用前一ASPX頁面創(chuàng)建的應答流。ps:比較Server.Transfer和Response.Redirect的區(qū)別。(1)Server.Transfer在服務器端完成,所以客戶端瀏覽器中的URL地址是不會改變的;Response.Redirect是客戶端完成,向服務器端提出新的頁面處理請求,所以客戶端瀏覽器中的URL地址是會改變
12、的。(2)Server.Transfer在服務器端完成,不需要客戶端提出請求,減少了客戶端對服務器端提出請求。(3)Server.Transfer只能夠轉跳到本地虛擬目錄指定的頁面,也就是工程項目中的頁面,而Response.Redirect則十分靈活,可以跳轉到任何URL地址。(4)Server.Transfer可以將前一個頁面的各種類型的值傳到新的頁面;Response.Redirect則只能借助URL中帶參數或是結合上面四種辦法把各種類型的值傳到新的頁面。優(yōu)點:1.直接在服務器端重定向,使用簡單方便,減少了客戶端對服務器端提出請求。2.可以傳遞各種數據類型的值和控件的值。缺點:1.客戶端
13、瀏覽器中的URL地址是不改變,會導致在新的頁面可能出現一些意想不到的問題。比如如果源頁面和目的頁面不在同一個虛擬目錄或其子目錄下,那么使用相對路徑的圖片、超鏈接都會導致錯誤的指向。/發(fā)送頁面public partial class transfer_write : System.Web.UI.Page public string param1 get return TextBox1.Text; public string param2 get return TextBox2.Text; protected void Button1_Click(object sender, EventArgs
14、e) Server.Transfer(transfer_read.aspx, true); /接收頁面方法1(利用類的靜態(tài)屬性): transfer_write newWeb; /實例前一個頁面窗體 ! newWeb = (transfer_write)Context.Handler; TextBox1.Text = newWeb.param1; TextBox2.Text = newWeb.param2; /方法2(類似于表單的post方式,不用設置靜態(tài)屬性),推薦這種方式,安全,簡單 TextBox1.Text = Request.FormTextBox1.ToString();六、表單提
15、交表單form的提交有兩種方式,一種是get的方法,一種是post 的方法.看下面代碼,理解兩種提交的區(qū)別:Get方式1、 寫值頁面: 1 2 2、 讀值頁面 /get方式 if (Requestname != null) TextBox1.Text = Requestname.ToString(); if (Requestage != null) TextBox2.Text = Requestage.ToString(); Post方式:1、寫值 1 2 3、 讀值: /post方式 if (Request.Formname != null) TextBox1.Text = Request.
16、Formname.ToString(); if (Request.Formage != null) TextBox2.Text = Request.Formage.ToString(); 表單提交中get和post方式的區(qū)別歸納如下幾點:1. get是從服務器上獲取數據,post是向服務器傳送數據。2. get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個字段與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。3. 對于get方式,
17、服務器端用Request.QueryString獲取變量的值,對于post方式,服務器端用Request.Form獲取提交的數據。4. get傳送的數據量較小,不能大于2KB。post傳送的數據量較大,一般被默認為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。5. get安全性非常低,post安全性較高。但是執(zhí)行效率卻比Post方法好。建議:1、get方式的安全性較Post方式要差些,包含機密信息的話,建議用Post數據提交方式;2、在做數據查詢時,建議用Get方式;而在做數據添加、修改或刪除時,建議用Post方式利用form的隱藏域隱藏域不會顯示在用戶的瀏覽器中,
18、一般是在頁面中加入一個隱藏控件, 與服務器進行交互時把值賦給隱藏控件并提交給下一頁面。隱藏域可以是任何存儲在網頁中的與網頁有關的信息的存儲庫。使用隱藏域存入數值時用:hidden 控件.value=數值,取出接收數值時用:變量=hidden 控件.value。使用隱藏域的優(yōu)點是實現簡單, 隱藏域是標準的HTML 控件,不需要復雜的編程邏輯。隱藏域在頁上存儲和讀取,不需要任何服務器資源,幾乎所有瀏覽器和客戶端設備都支持具有隱藏域的窗體。缺點是存儲結構少,僅僅支持簡單的數據結構,存儲量少,因為它被存儲在頁面本身,所以無法存儲較大的值,而且大的數據量會受到防火墻和代理的阻止。例:寫值: 讀值: if (Request.Formhide != null) TextBox2.Text = Request.Formhide.ToString(); 七、viewstateViewState不是跨頁面的.session是會話級的.application是應用程序級的.而viewstate則是頁面級的.也就是說出了這個頁面.該viewstate不能再被訪問.可以保存任何對象.如:page_load中:if(!IsPostBack)ViewStatetest=0;在頁面的某個button事件中:int
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年城市別墅裝修改造服務協(xié)議
- 2024水電項目工程承包協(xié)議范本
- 2024年酒店用品買賣協(xié)議
- 2024年房屋租賃三方協(xié)議樣本
- 店鋪裝修設計與施工一體化協(xié)議模板
- 2024年度勞動力成本協(xié)議樣本
- DB11∕T 1697-2019 動力鋰離子蓄電池制造業(yè)綠色工廠評價要求
- 2024年度中央空調系統(tǒng)翻新工程協(xié)議
- 2024商業(yè)采購協(xié)議模板全面指南
- 2024年輔導班家長服務協(xié)議
- 小學六年級數學上冊口算題300道(全)
- 《干粉滅火器檢查卡》
- 校園監(jiān)控值班記錄表(共2頁)
- 試樁施工方案 (完整版)
- 走中國工業(yè)化道路的思想及成就
- ESTIC-AU40使用說明書(中文100版)(共138頁)
- 河北省2012土建定額說明及計算規(guī)則(含定額總說明)解讀
- Prolog語言(耐心看完-你就入門了)
- 保霸線外加電流深井陽極地床陰極保護工程施工方案
- 藍色商務大氣感恩同行集團公司20周年慶典PPT模板
- 恒溫箱PLC控制系統(tǒng)畢業(yè)設計
評論
0/150
提交評論