列舉ASP.NET 頁面之間傳遞值的幾種方式。

1 .列舉ASP.NET 頁面之間傳遞值的幾種方式。html

1).使用QueryString, 如....?id=1; response. Redirect().... 
  2).使用Session變量 
  3).使用Server.Transfer

爲了在頁面之間傳遞變量內容,ASP.NET給了咱們幾個選擇。一種選擇是使用QueryString 屬性web

一:QueryString. 可使用查詢字符串請求網頁。ASP.NET中的QueryString訪問此信息。當你加載file.html?x = y時,它解析「x」和「y」。首先,咱們看到一個.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#cookie

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");
        }
    }
}

測試代碼這個網址:session

?param=first&id=true

要進行測試,請在Internet瀏覽器(例如Internet Explorer或Firefox)的URL末尾鍵入測試URL。該字符串指定「param」查詢等於「first」。而且「id」參數等於「true」。併發

Quote:可使用鍵或索引訪問的關聯String鍵和String值的集合。
在QueryString上使用HasKeys的頁面:C#app

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]);
}

這種方法的缺點

  1. QueryString 有一個最大長度,若是你必須發送不少信息這種方法不起做用。
  2. QueryString 在您的瀏覽器的地址部分中可見,所以您不該將其與敏感信息一塊兒使用。
  3. 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)); 
}

2、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始終是一個好習慣,由於瀏覽器可能已禁用c​​ookie。

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。

3、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();

4、Server.Transfer

終止當前頁面的執行並開始執行當前請求的新頁面。

Server.Transfer("Logon.aspx", true);
相關文章
相關標籤/搜索