列舉ASP.NET頁(yè)面之間傳遞值的幾種方式
1 .列舉ASP.NET 頁(yè)面之間傳遞值的幾種方式。
1).使用QueryString, 如....?id=1; response. Redirect()....
2).使用Session變量
3).使用Server.Transfer
為了在頁(yè)面之間傳遞變量?jī)?nèi)容,ASP.NET給了我們幾個(gè)選擇。一種選擇是使用QueryString 屬性
一:QueryString. 可以使用查詢(xún)字符串請(qǐng)求網(wǎng)頁(yè)。ASP.NET中的QueryString訪問(wèn)此信息。當(dāng)你加載file.html?x = y時(shí),它解析“x”和“y”。 首先,我們看到一個(gè).aspx Web窗體頁(yè)面,在用戶(hù)訪問(wèn)Default.aspx時(shí)執(zhí)行。這里的代碼是代碼隱藏部分Default.aspx.cs。
嘗試在 URL 的末尾添加字符串“ ?param = dotnet ”。Response.Write將被觸發(fā)。
基于: .NET QueryString示例:C#
using System; using System.Web.UI; public partial class _Default : Page { protected void Page_Load(object sender, EventArgs e) { string v = Request.QueryString["param"]; if (v != null) { Response.Write("param is "); Response.Write(v); } } }
結(jié)果, Page打印param查詢(xún)的值,該值是字符串值: param is dotnet 。
兩個(gè)參數(shù)。要繼續(xù),我們測(cè)試兩個(gè)查詢(xún)字符串URL參數(shù)。這是開(kāi)發(fā)中相當(dāng)普遍的要求。可能必須同時(shí)使用其中一個(gè)或兩個(gè)。
帶有多個(gè)參數(shù)的QueryString示例:C#
using System; using System.Web.UI; public partial class _Default : Page { protected void Page_Load(object sender, EventArgs e) { string v = Request.QueryString["param"]; if (v != null) { Response.Write("param is "); Response.Write(v); } string x = Request.QueryString["id"]; if (x != null) { Response.Write(" id detected"); } } }
測(cè)試代碼這個(gè)網(wǎng)址: ?param=first&id=true
要進(jìn)行測(cè)試,請(qǐng)?jiān)贗nternet瀏覽器(例如Internet Explorer或Firefox)的URL末尾鍵入測(cè)試URL。該字符串指定“param”查詢(xún)等于“first”。并且“id”參數(shù)等于“true”。
Quote:可以使用鍵或索引訪問(wèn)的關(guān)聯(lián)String鍵和String值的集合。
在QueryString上使用HasKeys的頁(yè)面:C#
using System; using System.Web.UI; using System.Collections.Specialized; public partial class _Default : Page { protected void Page_Load(object sender, EventArgs e) { // Get collection NameValueCollection n = Request.QueryString; // 查看是否存在任何查詢(xún)字符串 if (n.HasKeys()) { // 獲取第一個(gè)鍵和值 string k = n.GetKey(0); string v = n.Get(0); // 測(cè)試不同的鍵 if (k == "param") { Response.Write("param is " + v); } if (k == "id") { Response.Write("id is " + v); } } } }
Request.QueryString還可以使用它們?cè)诓樵?xún)字符串中的位置來(lái)檢索此值。
private void Page_Load(object sender, System.EventArgs e) { this.txtBox1.Text = Request.QueryString[0]; this.txtBox2.Text = Request.QueryString[1]; } foreach( string s in Request.QueryString) { Response.Write(Request.QueryString[s]); }
要么
for (int i =0;i < Request.QueryString.Count;i++) { Response.Write(Request.QueryString[i]); }
這種方法的缺點(diǎn)
- QueryString 有一個(gè)最大長(zhǎng)度,如果你必須發(fā)送很多信息這種方法不起作用。
- QueryString 在您的瀏覽器的地址部分中可見(jiàn),因此您不應(yīng)將其與敏感信息一起使用。
- QueryString 不能用于發(fā)送&和空格字符。
用%20替換空格和用%26替換空格。
private void btnSubmit_Click(object sender, System.EventArgs e) { string p1 = this.txtName.Text.Replace("&","%26"); p1 = this.txtName.Text.Replace(" ","%20"); string p2 = this.txtLastName.Text.Replace("&","%26"); p2 = this.txtName.Text.Replace(" ","%20"); "WebForm2.aspx?" + "Name=" + p1 + "&LastName=" + p2; Response.Redirect(p2); }
也可以使用Server.UrlEncode。Server.UrlEncode 方法更改查詢(xún)字符串,以便它們不會(huì)產(chǎn)生問(wèn)題。
private void btnSubmit_Click(object sender, System.EventArgs e) { Response.Redirect("WebForm2.Aspx?" + "Name=" + Server.UrlEncode(this.txtName.Text) + "&LastName=" + Server.UrlEncode(this.txtLastName.Text)); }
二、Session&Cookie
Session 使用簡(jiǎn)單,不僅能傳遞簡(jiǎn)單數(shù)據(jù)類(lèi)型,還能傳遞對(duì)象。.數(shù)據(jù)量大小是不限制的。在Session變量存儲(chǔ)大量的數(shù)據(jù)會(huì)消耗較多的服務(wù)器資源。容易丟失。在源頁(yè)面的代碼中創(chuàng)建你需要傳遞的名稱(chēng)和值構(gòu)造Session變量: Session["Name"]="Value(Or Object) ";在目的頁(yè)面的代碼使用Session變量取出傳遞的值。 Result = Session["Nmae"] 注意:session不用時(shí)可以銷(xiāo)毀它,銷(xiāo)毀的方法是:清除一個(gè): Session.Remove("session名") ;清除所有: Session.Clear();
string city = "Seattle"; // 保存到Web窗體頁(yè)面類(lèi)中的會(huì)話(huà)狀態(tài) Session["City"] = city; //從Web窗體頁(yè)面類(lèi)中的會(huì)話(huà)狀態(tài)讀取。 city = (string)(Session["City"]); //在Web窗體頁(yè)面類(lèi)之外,使用HttpContext.Current。 HttpContext context = HttpContext.Current; context.Session["FirstName"] = firstName; firstName = (string)(context.Session["FirstName"]);
Session類(lèi)類(lèi)似于鍵類(lèi)型字符串和值類(lèi)型對(duì)象的字典。這允許存儲(chǔ)任何類(lèi)型的變量,并稍后通過(guò)名稱(chēng)引用它。
什么是Cookies?
Cookie是在客戶(hù)端的系統(tǒng)或客戶(hù)端瀏覽器內(nèi)存上創(chuàng)建的小文件(如果是臨時(shí)的)。我們可以在客戶(hù)端系統(tǒng)中存儲(chǔ)小塊信息,并在需要時(shí)使用它。 最有趣的是它與用戶(hù)透明地工作 。它可以輕松地在Web應(yīng)用程序的任何位置使用。 Cookies以純文本格式存儲(chǔ)信息 。如果Web應(yīng)用程序使用cookie,則服務(wù)器發(fā)送cookie,客戶(hù)端瀏覽器將存儲(chǔ)它。然后,瀏覽器在下次請(qǐng)求頁(yè)面時(shí)將cookie返回給服務(wù)器。使用cookie的最常見(jiàn)示例是 存儲(chǔ)用戶(hù)信息,用戶(hù)首選項(xiàng),密碼記憶選項(xiàng) 等.Cookies有許多優(yōu)點(diǎn)和缺點(diǎn)。
Cookies是如何開(kāi)始的?
當(dāng)客戶(hù)端向服務(wù)器請(qǐng)求時(shí),服務(wù)器將cookie發(fā)送到客戶(hù)端。后續(xù)請(qǐng)求可以引用相同的cookie。例如,如果 codeproject.com 將會(huì)話(huà)ID存儲(chǔ)為cookie,則當(dāng)客戶(hù)端第一次在服務(wù)器上命中時(shí),服務(wù)器會(huì)生成會(huì)話(huà)ID并將其作為cookie發(fā)送到客戶(hù)端
瀏覽器和Web服務(wù)器負(fù)責(zé)交換cookie信息。對(duì)于不同的站點(diǎn),瀏覽器以不同的方式保留cookie 如果頁(yè)面需要來(lái)自cookie的信息,當(dāng)該URL被命中時(shí),首先它在本地系統(tǒng)中搜索cookie信息,然后將其移動(dòng)到具有該信息的服務(wù)器。
Cookies的優(yōu)點(diǎn)
以下是在Web應(yīng)用程序中使用cookie的主要優(yōu)點(diǎn):
它的使用和實(shí)現(xiàn)非常簡(jiǎn)單。
瀏覽器負(fù)責(zé)發(fā)送數(shù)據(jù)。
對(duì)于包含cookie的多個(gè)站點(diǎn),瀏覽器會(huì)自動(dòng)排列它們。
Cookie的缺點(diǎn)
它以簡(jiǎn)單的文本格式存儲(chǔ)數(shù)據(jù),因此根本 不安全 。
Cookie數(shù)據(jù)有一個(gè)大小限制( 4096字節(jié)/ 4KB )。
允許的最大cookie數(shù)量也是有限的。大多數(shù)瀏覽器將cookie的數(shù)量限制為20.如果新的cookie出現(xiàn),舊的cookie將被丟棄。有些瀏覽器最多支持 300 個(gè)。
如何創(chuàng)建Cookie
要使用cookie,我們需要使用命名空間System.web。
方式1(使用HttpCookies類(lèi))
HttpCookie StudentCookies = new HttpCookie("StudentCookies"); StudentCookies.Value = TextBox1.Text; StudentCookies.Expires = DateTime.Now.AddHours(1); Response.Cookies.Add(StudentCookies);
方式2(直接使用Response)
Response.Cookies["StudentCookies"].Value = TextBox1.Text; Response.Cookies["StudentCookies"].Expires = DateTime.Now.AddDays(1);
方式3(同一個(gè)cookie中的多個(gè)值)
Response.Cookies["StudentCookies"]["RollNumber"] = TextBox1.Text; Response.Cookies["StudentCookies"]["FirstName"] = "Abhimanyu"; Response.Cookies["StudentCookies"]["MiddleName"] = "Kumar"; Response.Cookies["StudentCookies"]["LastName"] = "Vatsa"; Response.Cookies["StudentCookies"]["TotalMarks"] = "499"; Response.Cookies["StudentCookies"].Expires = DateTime.Now.AddDays(1);
查看代碼,看看我們?nèi)绾蝿?chuàng)建cookie并使用Web響應(yīng)添加它。
已創(chuàng)建的cookie將一直存在,直到瀏覽器關(guān)閉。我們可以堅(jiān)持使用cookie。
如何從Cookies中讀取數(shù)據(jù)
現(xiàn)在是時(shí)候從cookie中檢索數(shù)據(jù)了。在閱讀cookie之前,首先我們需要檢查是否找到了cookie。在閱讀cookie之前檢查cookie始終是一個(gè)好習(xí)慣,因?yàn)闉g覽器可能已禁用cookie。
string roll = Request.Cookies["StudentCookies"].Value; //For First Way string roll = Request.Cookies["StudentCookies"].Value; //For Second Way string roll; roll = Request.Cookies["StudentCookies"]["RollNumber"]; roll = roll + " " + Request.Cookies["StudentCookies"]["FirstName"]; roll = roll + " " + Request.Cookies["StudentCookies"]["MiddleName"]; roll = roll + " " + Request.Cookies["StudentCookies"]["LastName"]; roll = roll + " " + Request.Cookies["StudentCookies"]["TotalMarks"]; Label1.Text = roll;
如何清除cookie信息?
我們可以在cookie文件夾中清除客戶(hù)端機(jī)器上的cookie信息
設(shè)置到cookie對(duì)象的到期時(shí)間
userInfo.Expires = DateTime.Now.AddHours(1);
它會(huì)在一小時(shí)內(nèi)清除cookie。
三、Application對(duì)象
Application對(duì)象的作用范圍是整個(gè)全局,也就是說(shuō)對(duì)所有用戶(hù)都有效。它在整個(gè)應(yīng)用程序生命周期中都是有效的,類(lèi)似于使用全局變量一樣,所以可以在不同頁(yè)面中對(duì)它進(jìn)行存取。它和Session變量的區(qū)別在于,前者是所有的用戶(hù)共用的全局變量,后者是各個(gè)用戶(hù)獨(dú)有的全局變量。
舉個(gè)例子:網(wǎng)站訪問(wèn)數(shù)。多個(gè)請(qǐng)求訪問(wèn)時(shí)都可以對(duì)它進(jìn)行操作。
優(yōu)點(diǎn):1.使用簡(jiǎn)單,消耗較少的服務(wù)器資源。
2.不僅能傳遞簡(jiǎn)單數(shù)據(jù),還能傳遞對(duì)象。
3.數(shù)據(jù)量大小是不限制的。
缺點(diǎn):1.作為全局變量容易被誤操作。所以單個(gè)用戶(hù)使用的變量一般不能用application。
使用方法:1.在源頁(yè)面的代碼中創(chuàng)建你需要傳遞的名稱(chēng)和值構(gòu)造Application變量:Application["Nmae"]="Value(Or Object)";
2.在目的頁(yè)面的代碼使用Application變量取出傳遞的值。Result = Application["Nmae"]
注意:常用lock和unlock方法用來(lái)鎖定和解鎖,為了防止并發(fā)修改。
string name; Application.Lock(); name = Application["name"].ToString(); Application.UnLock();
四、Server.Transfer
終止當(dāng)前頁(yè)面的執(zhí)行并開(kāi)始執(zhí)行當(dāng)前請(qǐng)求的新頁(yè)面。
Server.Transfer("Logon.aspx", true);
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
ASP.NET調(diào)用WebService服務(wù)的方法詳解
這篇文章主要介紹了ASP.NET調(diào)用WebService服務(wù)的方法,較為詳細(xì)的分析了WebService服務(wù)的功能,創(chuàng)建步驟與使用方法,需要的朋友可以參考下2016-05-05asp.net使用ODP即oracle連接方式的的防注入登錄驗(yàn)證程序
這篇文章主要介紹了asp.net使用ODP即oracle連接方式的的防注入登錄驗(yàn)證程序,需要的朋友可以參考下2014-05-05DataTable轉(zhuǎn)成字符串復(fù)制到txt文本的小例子
DataTable轉(zhuǎn)成字符串復(fù)制到txt文本的小例子,需要的朋友可以參考一下2013-03-03asp.net項(xiàng)目開(kāi)發(fā)中用到的小技巧
項(xiàng)目中用到的小技巧2010-03-03asp.net richTextBox中高亮顯示選中字符串或文本
最近開(kāi)發(fā)程序需要對(duì)一段文本中的某個(gè)字符串進(jìn)行高亮顯示,網(wǎng)上找了下資料2011-11-11.Net中關(guān)于stirng轉(zhuǎn)System.Type的一種實(shí)現(xiàn)思路詳解
這篇文章主要給大家介紹了.Net中關(guān)于stirng轉(zhuǎn)System.Type的一種實(shí)現(xiàn)思路的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05如何在網(wǎng)站級(jí)別動(dòng)態(tài)更改主題
如何在網(wǎng)站級(jí)別動(dòng)態(tài)更改主題...2007-04-04