列舉ASP.NET 頁面之間傳遞值的幾種方式。
1 .列舉ASP.NET 頁面之間傳遞值的幾種方式。
1).使用QueryString, 如....?id=1; response. Redirect().... 2).使用Session變數 3).使用Server.Transfer
為了在頁面之間傳遞變數內容,ASP.NET給了我們幾個選擇。一種選擇是使用QueryString 屬性
首先,我們看到一個.aspx Web窗體頁面,在使用者訪問Default.aspx時執行。這裡的程式碼是程式碼隱藏部分Default.aspx.cs。
嘗試在URL
的末尾新增字串“?param = dotnet
”。Response.Write將被觸發。
基於: .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); } } }
結果, Page列印param查詢的值,該值是字串值:param is dotnet
。
兩個引數。要繼續,我們測試兩個查詢字串URL引數。這是開發中相當普遍的要求。可能必須同時使用其中一個或兩個。
帶有多個引數的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"); } } }
測試程式碼這個網址:
?param=first&id=true
要進行測試,請在Internet瀏覽器(例如Internet Explorer或Firefox)的URL末尾鍵入測試URL。該字串指定“param”查詢等於“first”。並且“id”引數等於“true”。
Quote:可以使用鍵或索引訪問的關聯String鍵和String值的集合。
在QueryString上使用HasKeys的頁面: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; // 檢視是否存在任何查詢字串 if (n.HasKeys()) { // 獲取第一個鍵和值 string k = n.GetKey(0); string v = n.Get(0); // 測試不同的鍵 if (k == "param") { Response.Write("param is " + v); } if (k == "id") { Response.Write("id is " + v); } } } }
Request.QueryString還可以使用它們在查詢字串中的位置來檢索此值。
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]); }
這種方法的缺點
- QueryString 有一個最大長度,如果你必須傳送很多資訊這種方法不起作用。
- QueryString 在您的瀏覽器的地址部分中可見,因此您不應將其與敏感資訊一起使用。
- QueryString 不能用於傳送&和空格字元。
用%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 方法更改查詢字串,以便它們不會產生問題。
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
使用簡單,不僅能傳遞簡單資料型別,還能傳遞物件。.資料量大小是不限制的。在Session變數儲存大量的資料會消耗較多的伺服器資源。容易丟失。在源頁面的程式碼中建立你需要傳遞的名稱和值構造Session變數:Session["Name"]="Value(Or Object)
";在目的頁面的程式碼使用Session變數取出傳遞的值。Result = Session["Nmae"]
注意:session不用時可以銷燬它,銷燬的方法是:清除一個:Session.Remove("session名")
;清除所有:Session.Clear();
string city = "Seattle"; // 儲存到Web窗體頁面類中的會話狀態 Session["City"] = city; //從Web窗體頁面類中的會話狀態讀取。 city = (string)(Session["City"]); //在Web窗體頁面類之外,使用HttpContext.Current。 HttpContext context = HttpContext.Current; context.Session["FirstName"] = firstName; firstName = (string)(context.Session["FirstName"]);
Session類類似於鍵型別字串和值型別物件的字典。這允許儲存任何型別的變數,並稍後通過名稱引用它。
什麼是Cookies?
Cookie是在客戶端的系統或客戶端瀏覽器記憶體上建立的小檔案(如果是臨時的)。我們可以在客戶端系統中儲存小塊資訊,並在需要時使用它。最有趣的是它與使用者透明地工作
。它可以輕鬆地在Web應用程式的任何位置使用。Cookies以純文字格式儲存資訊
。如果Web應用程式使用cookie,則伺服器傳送cookie,客戶端瀏覽器將儲存它。然後,瀏覽器在下次請求頁面時將cookie返回給伺服器。使用cookie的最常見示例是儲存使用者資訊,使用者首選項,密碼記憶選項
等.Cookies有許多優點和缺點。
Cookies是如何開始的?
當客戶端向伺服器請求時,伺服器將cookie傳送到客戶端。後續請求可以引用相同的cookie。例如,如果codeproject.com
將會話ID儲存為cookie,則當客戶端第一次在伺服器上命中時,伺服器會生成會話ID並將其作為cookie傳送到客戶端
瀏覽器和Web伺服器負責交換cookie資訊。對於不同的站點,瀏覽器以不同的方式保留cookie 如果頁面需要來自cookie的資訊,當該URL被命中時,首先它在本地系統中搜索cookie資訊,然後將其移動到具有該資訊的伺服器。
Cookies的優點
以下是在Web應用程式中使用cookie的主要優點:
它的使用和實現非常簡單。
瀏覽器負責傳送資料。
對於包含cookie的多個站點,瀏覽器會自動排列它們。
Cookie的缺點
它以簡單的文字格式儲存資料,因此根本不安全
。
Cookie資料有一個大小限制(4096位元組/ 4KB
)。
允許的最大cookie數量也是有限的。大多數瀏覽器將cookie的數量限制為20.如果新的cookie出現,舊的cookie將被丟棄。有些瀏覽器最多支援300
個。
如何建立Cookie
要使用cookie,我們需要使用名稱空間System.web。
方式1(使用HttpCookies類)
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(同一個cookie中的多個值)
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);
檢視程式碼,看看我們如何建立cookie並使用Web響應新增它。
已建立的cookie將一直存在,直到瀏覽器關閉。我們可以堅持使用cookie。
如何從Cookies中讀取資料
現在是時候從cookie中檢索資料了。在閱讀cookie之前,首先我們需要檢查是否找到了cookie。在閱讀cookie之前檢查cookie始終是一個好習慣,因為瀏覽器可能已禁用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資料夾中清除客戶端機器上的cookie資訊
設定到cookie物件的到期時間
userInfo.Expires = DateTime.Now.AddHours(1);
它會在一小時內清除cookie。
三、Application物件
Application物件的作用範圍是整個全域性,也就是說對所有使用者都有效。它在整個應用程式生命週期中都是有效的,類似於使用全域性變數一樣,所以可以在不同頁面中對它進行存取。它和Session變數的區別在於,前者是所有的使用者共用的全域性變數,後者是各個使用者獨有的全域性變數。
舉個例子:網站訪問數。多個請求訪問時都可以對它進行操作。
優點:1.使用簡單,消耗較少的伺服器資源。
2.不僅能傳遞簡單資料,還能傳遞物件。
3.資料量大小是不限制的。
缺點:1.作為全域性變數容易被誤操作。所以單個使用者使用的變數一般不能用application。
使用方法:1.在源頁面的程式碼中建立你需要傳遞的名稱和值構造Application變數:Application["Nmae"]="Value(Or Object)";
2.在目的頁面的程式碼使用Application變數取出傳遞的值。Result = Application["Nmae"]
注意:常用lock和unlock方法用來鎖定和解鎖,為了防止併發修改。
string name; Application.Lock(); name = Application["name"].ToString(); Application.UnLock();
四、Server.Transfer
終止當前頁面的執行並開始執行當前請求的新頁面。
Server.Transfer("Logon.aspx", true);