日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET中实现页面间的参数传递 QueryString\Application\Session\Cookie

發布時間:2025/3/13 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET中实现页面间的参数传递 QueryString\Application\Session\Cookie 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一.使用QueryString

??? 使用QueryString在頁面間傳遞值是一種非常常見的方法,我們在ASP中就常常用到。

??? (1)優點和缺點
??? 優點:
??? 1.使用簡單,對于安全性要求不高時傳遞數字或是文本值非常有效。
??? 缺點:
??? 1.缺乏安全性,由于它的值暴露在瀏覽器的URL地址中的。
??? 2.不能傳遞對象。

??? (2)使用方法
??? 1.在源頁面的代碼中用需要傳遞的名稱和值構造URL地址。
??? 2.在源頁面的代碼用Response.Redirect(URL);重定向到上面的URL地址中。
??? 3.在目的頁面的代碼使用Request.QueryString["name"];取出URL地址中傳遞的值。

??? (3)應用舉例

??? 1.源頁面*.aspx的代碼:

?? private void Button1_Click(object sender, System.EventArgs e)
?? {
??? string urlAddress;
??? string Name1;
??? string Name2;
??? string Name3;
??? string Name1Value = "HelloName1";???
??? int Name2Value = 1234567;
??? string Name3Value = "你好名稱3";

??? urlAddress = "destinationWebForm.aspx?Name1=" + Name1Value + "&" + "Name2=" + Name2Value.ToString() + "&" + "Name3=" + Name3Value;
??? Response.Redirect(urlAddress);???
?? }

??? 2.目的頁面destinationWebForm.aspx的代碼:
?? private void Page_Load(object sender, System.EventArgs e)
?? {
??? string myName1Value;
??? int??? myName2Value;
??? string myName3Value;

??? myName1Value = Request.QueryString["Name1"];
??? myName2Value = Convert.ToInt32(Request.QueryString["Name2"]);
??? myName3Value = Request.QueryString["Name3"];
?? }

(4)可能出現的問題
1在處理Resonse.QueryString函數漢字參數傳遞時,發生不能完整傳遞參數的具體值的錯誤,解決有兩個方法。

方法一:需要重新設置Web.config中的encoding和全球化設置。

1、首行:<?xml version="1.0" encoding="utf-8" ?>
更改為:
<?xml version="1.0" encoding="GB2312" ?>
2、<!-- 全球化
????????? 此節設置應用程序的全球化設置。
??? -->
??? <globalization
??????????? requestEncoding="utf-8"
??????????? responseEncoding="utf-8"
?? />
更改為:
<!-- 全球化
????????? 此節設置應用程序的全球化設置。
??? -->
??? <globalization
??????????? requestEncoding="GB2312"
??????????? responseEncoding="GB2312"
?? />
??? [1]

??? 方法二:使用Server.UrlEncode和Server.UrlDecode對漢字或者特殊字符進行編碼和解碼。

??? 二、使用Application變量

??? 使用Application變量是在頁面間傳遞值的第二種方式。
??? Application變量在整個應用程序生命周期中都是有效的,類似于使用全局變量一樣,所以可以在不同頁面中對它進行存取。它和Session變量的區別在于,前者是所有的用戶共用的全局變量,后者是各個用戶獨有的全局變量。
??? 舉個例子來解釋:
??? 網站訪問的計數器變量一般采用Application變量,多個請求訪問時共享這一個變量,均可對它進行操作,該變量可以被整個應用程序的各個頁面直接使用。
?? 用戶登陸的帳號名一般采用Session變量,多個請求訪問時有各自的Session變量,只能對自己的該Session變量進行操作,整個應用程序的各個頁面直接使用這個變量來獲得用戶的基本信息。

??? (1)優點和缺點

??? 優點:
??? 1.使用簡單,消耗較少的服務器資源。
??? 2.不僅能傳遞簡單數據,還能傳遞對象。
??? 3.數據量大小是不限制的。

??? 缺點:
??? 1.作為全局變量容易被誤操作。

??? (2)使用方法

??? 1.在源頁面的代碼中創建你需要傳遞的名稱和值構造Application變量:Application["Nmae"]="Value(Or Object)";
??? 2.在目的頁面的代碼使用Application變量取出傳遞的值。Result = Application["Nmae"]

??? (3)應用舉例

??? 1.源頁面 *.aspx的代碼:

private void Button1_Click(object sender, System.EventArgs e)
?? {
??? string Name1Value = "HelloName1";???
??? int Name2Value = 1234567;

??? Application["Name1"] = Name1Value;
??? Application["Name2"] = Name2Value;?????
?? }

??? 2.目的頁面 *.aspx的代碼:

private void Page_Load(object sender, System.EventArgs e)
?? {
??? string myName1Value;
??? int??? myName2Value;

??? myName1Value = Application["Name1"].ToString();
??? myName2Value = (int)Application["Name2"];
?? }


?? 三、使用Session變量

??? 使用Application變量是在頁面間傳遞值的第三種方式。Session變量和Application變量非常類似,它們的區別也已經在上面關于Application變量時提到了。

??? (1)優點和缺點
??? 優點:
??? 1.使用簡單,不僅能傳遞簡單數據類型,還能傳遞對象。
??? 2.數據量大小是不限制的。

??? 缺點:
??? 1.在Session變量存儲大量的數據會消耗較多的服務器資源。


??? (2)使用方法

??? 1.在源頁面的代碼中創建你需要傳遞的名稱和值構造Session變量:Session["Nmae"]="Value(Or Object)";
??? 2.在目的頁面的代碼使用Session變量取出傳遞的值。Result = Session["Nmae"]

??? (3)應用舉例

????? 與Application變量類似,只是將Application替換為Session即可。

??? 四、使用Cookie對象


?? 使用Cookie對象是在頁面間傳遞值的第四種方式。Cookie用于在用戶瀏覽器上存儲小塊的信息,保存用戶的相關信息,比如用戶訪問某網站時用戶的ID,用戶的偏好等,用戶下次訪問就可以通過檢索獲得以前的信息。所以Cookie也可以在頁面間傳遞值。Cookie通過HTTP頭在瀏覽器和服務器之間來回傳遞的。Cookie只能包含字符串的值,如果想在Cookie存儲整數值,那么需要先轉換為字符串的形式。
可以通過遍歷Request對象的Cookie集合可以獲得所有的瀏覽器所有的Cookie。方法如下:
foreach (string strKey in Request.Cookies)
{
???? lblCookies.Text += strKey + "=" + Request.Cookies[ strKey ].Value;
}


??? (1)優點和缺點

??? 優點:
??? 1.使用簡單,是保持用戶狀態的一種非常常用的方法。比如在購物網站中用戶跨多個頁面表單時可以用它來保持用戶狀態。

??? 缺點:
??? 1.常常被人認為用來收集用戶隱私而遭到批評。


??? (2)使用方法

??? 1.在源頁面的代碼中創建你需要傳遞的名稱和值構造Cookie對象:
??? HttpCookie objCookie = new HttpCookie("myCookie","Hello,Cookie!");
??? Response.Cookies.Add(cookie);
??? 2.在目的頁面的代碼使用Cookie對象取出傳遞的值:Result = Request.Cookies[ "myCookie" ].Value;

??? (3)應用舉例

??? 1.源頁面 *.aspx的代碼:

private void Button1_Click(object sender, System.EventArgs e)
?? {
??? HttpCookie objCookie = new HttpCookie("myCookie","Hello,Cookie!");
??? Response.Cookies.Add(objCookie); ?????
?? }

??? 2.目的頁面 *.aspx的代碼:

private void Page_Load(object sender, System.EventArgs e)
?? {
??? string myName1Value;
??? myName1Value = Request.Cookies[ "myCookie" ].Value;
?? }

??? 五、使用Server.Transfer


??? 使用Server.Transfer變量是在頁面間傳遞值的第五種方式。上面的四個方法我們在ASP中常常使用,但是這個方法是在ASP.NET中新出現的。Server.Transfer是從當前的ASPX頁面轉到新的ASPX頁面,服務器端執行新頁并輸出,在新頁面中通過Context.Handler來獲得前一個頁面傳遞的各種數據類型的值、表單數據、QueryString.由于重定向完全在服務器端完成,所以客戶端瀏覽器中的URL地址是不會改變的。
??? 調用Server.Transfer時,當前的ASPX頁面終止執行,執行流程轉入另一個ASPX頁面,但新的ASPX頁面仍使用前一ASPX頁面創建的應答流。[2]

??? 在這里比較一下Server.Transfer和在“一”中使用的Response.Redirect的區別。
??? (1)Server.Transfer在服務器端完成,所以客戶端瀏覽器中的URL地址是不會改變的;Response.Redirect是客戶端完成,向服務器端提出新的頁面處理請求,所以客戶端瀏覽器中的URL地址是會改變的。
???? (2)Server.Transfer在服務器端完成,不需要客戶端提出請求,減少了客戶端對服務器端提出請求。[2]
??? (3)Server.Transfer只能夠轉跳到本地虛擬目錄指定的頁面,也就是工程項目中的頁面,而Response.Redirect則十分靈活,可以跳轉到任何URL地址。
??? (4)Server.Transfer可以將前一個頁面的各種類型的值傳到新的頁面;Response.Redirect則只能借助URL中帶參數或是結合上面四種辦法把各種類型的值傳到新的頁面。
???
??? 繼續我們的Server.Transfer用法。

??? (1)優點和缺點

??? 優點:
??? 1.直接在服務器端重定向,使用簡單方便,減少了客戶端對服務器端提出請求。
??? 2.可以傳遞各種數據類型的值和控件的值。

??? 缺點:
??? 1.客戶端瀏覽器中的URL地址是不改變,會導致在新的頁面可能出現一些意想不到的問題。比如如果源頁面和目的頁面不在同一個虛擬目錄或其子目錄下,那么使用相對路徑的圖片、超鏈接都會導致錯誤的指向。[3]


??? (2)使用方法

??? 1.在源頁面的代碼中,使用Page類的Server.Transfer跳到另一個頁面傳遞頁面數據:
??? Server.Transfer("destinationWebForm.aspx","false")。

??? 2.在目的頁面中,使用Context.Handler來接收數據:
??? FormerPage formerPage = (FormerPage)Context.Handler;
??? 然后用formerPage的屬性和方法來獲取前一個頁面的值,或者直接用
??? Context.Items["myParameter "]
??? 來獲取前一個頁面的值。

??? 需要注意的是獲取這些值必須在新的頁面首次加載時,才能正確獲取上一頁面的各種數據類型或是控件的值。在以后的postback時,就無法獲取上一頁面的各種數據類型或是控件的值了,因為此時得到的當前頁面的實例. 所以需要在新頁面(destinationWebForm.aspx)的Page_Load()事件中使用if(!IsPostBack)把獲取前一個頁面的值的代碼包含起來,才能獲得前一個頁面傳遞的各種數據類型的值、表單數據、QueryString。

??? (3)應用舉例

??? 1.源頁面 FormerPage.aspx的代碼:

public string HelloContextAttribute
?? {
??? get
??? {
???? return "Use Attribute: Hello,Context";
??? }
?? }
?? public string HelloContextMethod()
?? {
??? return "Call Method: Hello,Context!";
?? }

?? public string TextBoxValue
?? {
??? get
??? {
???? return TextBox1.Text;
??? }
?? }


?? private void Button1_Click(object sender, System.EventArgs e)
?? {
??? string Name1Value = "Hello, Name1!";
??? TextBox1.Text ="Hello,TextBox1!";

??? ArrayList myList = new ArrayList(3);//創建動態數組
??? myList.Add("Hello,Array1! ");//向動態數組中添加新的值
??? myList.Add("Hello,Array2!");
??? myList.Add("Hello,Array3!");
??? //Context可保存任意數據類型,Context字典特定于某個Http請求。
??? //對于不同客戶端,值是不一樣的。
??? Context.Items["destinationList"] = myList;//在Context.Items中保存動態數組

??? Context.Items.Add("newContext","Hello,NewContext");//在Context.Items中保存一組名稱-值的數據

??? //Server.Transfer第二參數如果為true,表示本頁面的Form和QuerryString的值在新頁面繼續有效。
??? //否則在新頁面無法獲得TextBox1的值。
??? Server.Transfer("destinationWebForm.aspx?Name1="+ Name1Value,true);
?? }


??? 2.目的頁面 destinationWebForm.aspx的代碼:
???
?? private void Page_Load(object sender, System.EventArgs e)
?? {
??? if(!IsPostBack)
??? {
???? try
???? {
????? string helloContextAttribute;
????? string helloContextMethod;
????? string textBoxValue;
????? string contextItemsValue;
????? string queryString;

????? ArrayList listResult;

????? FormerPage formerPage = (FormerPage)Context.Handler;
????? helloContextAttribute = formerPage.HelloContextAttribute;//通過FormerPage中定義的屬性來獲取值
????? helloContextMethod = formerPage.HelloContextMethod();//通過FormerPage中定義的方法來獲取值
????? textBoxValue = formerPage.TextBoxValue;//通過FormerPage中返回文本控件的值
????? //下面的方法多用于用戶在控件中輸入值后才能獲取,但是在程序中給直接TextBox1.Text賦值,那么下面的方法獲得
????? //的空值,在這種情況下需要使用上面的獲取方法
????? //textBoxValue = Request.Form["TextBox1"];
??????????
????? contextItemsValue = Context.Items["newContext"].ToString();//通過FormerPage中Context的Items獲取值
????? listResult = (ArrayList)Context.Items["destinationList"];//通過FormerPage中Context的Items獲取對象,強制轉換類型:
????? queryString = Request.QueryString["Name1"];//通過FormerPage的URL中的QueryString獲取值
???? }
???? catch
???? {
????? Response.Write("Error!");
???? }????????????
??? }
?? }

轉載于:https://www.cnblogs.com/zhangkuntel/archive/2010/01/13/1646662.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的ASP.NET中实现页面间的参数传递 QueryString\Application\Session\Cookie的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。