熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

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

2022-06-13   來源: .NET編程 
    面傳值是學習初期都會面臨的一個問題總的來說有頁面傳值存儲對象傳值ajaxmodel表單等但是一般來說常用的較簡單有QueryStringSessionCookiesApplicationServerTransfer
   
    QueryString
   
    QueryString是一種非常簡單的傳值方式他可以將傳送的值顯示在浏覽器的地址欄中如果是傳遞一個或多個安全性要求不高或是結構簡單的數值時可以使用這個方法但是對於傳遞數組或對象的話就不能用這個方法了
   
    這種方法的優點使用簡單對於安全性要求不高時傳遞數字或是文本值非常有效
   
    這種方法的缺點缺乏安全性由於它的值暴露在浏覽器的URL地址中的
   
    不能傳遞對象
   
    使用方法在源頁面的代碼中用需要傳遞的名稱和值構造URL地址
   
    在源頁面的代碼用ResponseRedirect(URL)重定向到上面的URL地址中
   
    在目的頁面的代碼使用RequestQueryString[name];取出URL地址中傳遞的值
   
    例子)aaspx
   
    private void Button_Click(object sender SystemEventArgs e)
   
    {
   
    string s_url;
   
    s_url = baspx?name= + LabelText;
   
    ResponseRedirect(s_url)
   
    }
   
    ()baspx
   
    private void Page_Load(object sender EventArgs e)
   
    {
   
    LabelText = RequestQueryString[name];
   
    }
   


Session
   
    想必這個肯定是大家使用中最常見的用法了其操作與Application類似作用於用戶個人所以過量的存儲會導致服務器內存資源的耗盡
   
    優點使用簡單不僅能傳遞簡單數據類型還能傳遞對象
   
    數據量大小是不限制的
   
    缺點在Session變量存儲大量的數據會消耗較多的服務器資源
   
    容易丟失
   
    使用方法在源頁面的代碼中創建你需要傳遞的名稱和值構造Session變量Session[Name]=Value(Or Object);
   
    在目的頁面的代碼使用Session變量取出傳遞的值Result = Session[Nmae]
   
    注意session不用時可以銷毀它銷毀的方法是清除一個SessionRemove(session名
   
    清除所有SessionClear()
   
    例子)aaspx
   
    private void Button_Click(object sender SystemEventArgs e)
   
    {
   
    Session[name] = LabelText;
   
    }
   
    ()baspx
   
    private void Page_Load(object sender EventArgs e)
   
    {
   
    string name;
   
    name = Session[name]ToString()
   
    }
   
 Cookie
   
    這個也是大家常使用的方法Cookie用於在用戶浏覽器上存儲小塊的信息保存用戶的相關信息比如用戶訪問某網站時用戶的ID用戶的偏好等用戶下次訪問就可以通過檢索獲得以前的信息所以Cookie也可以在頁面間傳遞值Cookie通過HTTP頭在浏覽器和服務器之間來回傳遞的Cookie只能包含字符串的值如果想在Cookie存儲整數值那麼需要先轉換為字符串的形式
   
    與Session一樣其是什對每一個用戶而言的但是有個本質的區別即Cookie是存放在客戶端的而session是存放在服務器端的而且Cookie的使用要配合ASPNET內置對象Request來使用
   
    優點使用簡單是保持用戶狀態的一種非常常用的方法比如在購物網站中用戶跨多個頁面表單時可以用它來保持用戶狀態
   
    缺點常常被人認為用來收集用戶隱私而遭到批評
   
    安全性不高容易偽造
   
    使用方法在源頁面的代碼中創建你需要傳遞的名稱和值構造Cookie對象
   
    HttpCookie objCookie = new HttpCookie(myCookieHelloCookie!
   
    ResponseCookiesAdd(cookie)
   
    在目的頁面的代碼使用Cookie對象取出傳遞的值Result = RequestCookies[ myCookie ]Value;
   
    例子)aaspx
   
    private void Button_Click(object sender SystemEventArgs e)
   
    {
   
    HttpCookie objCookie = new HttpCookie(myCookieHelloCookie!
   
    ResponseCookiesAdd(objCookie)
   
    }
   
    ()baspx
   
    string myNameValue;
   
    myNameValue = RequestCookies[ myCookie ]Value;
   


   Application
   
    Application對象的作用范圍是整個全局也就是說對所有用戶都有效它在整個應用程序生命周期中都是有效的類似於使用全局變量一樣所以可以在不同頁面中對它進行存取它和Session變量的區別在於前者是所有的用戶共用的全局變量後者是各個用戶獨有的全局變量
   
    可能有人會問既然所有用戶都可以使用application變量那他可以用在什麼場合呢?這裡舉個例子網站訪問數多個請求訪問時都可以對它進行操作
   
    優點使用簡單消耗較少的服務器資源
   
    不僅能傳遞簡單數據還能傳遞對象
   
    數據量大小是不限制的
   
    缺點作為全局變量容易被誤操作所以單個用戶使用的變量一般不能用application
   
    使用方法在源頁面的代碼中創建你需要傳遞的名稱和值構造Application變量Application[Nmae]=Value(Or Object);
   
    在目的頁面的代碼使用Application變量取出傳遞的值Result = Application[Nmae]
   
    注意常用lock和unlock方法用來鎖定和解鎖為了防止並發修改
   
    例子)aaspx
   
    private void Button_Click(object sender SystemEventArgs e)
   
    {
   
    Application[name] = LabelText;
   
    }
   
    ()baspx
   
    private void Page_Load(object sender EventArgs e)
   
    {
   
    string name;
   
    ApplicationLock()
   
    name = Application[name]ToString()
   
    ApplicationUnLock()
   
    }
   
  ServerTransfer
   
    這個才可以說是面象對象開發所使用的方法其使用ServerTransfer方法把流程從當前頁面引導到另一個頁面中新的頁面使用前一個頁面的應答流所以這個方法是完全面象對象的簡潔有效
   
    ServerTransfer是從當前的ASPX頁面轉到新的ASPX頁面服務器端執行新頁並輸出在新頁面中通過ContextHandler來獲得前一個頁面傳遞的各種數據類型的值表單數據QueryString由於重定向完全在服務器端完成所以客戶端浏覽器中的URL地址是不會改變的調用ServerTransfer時當前的ASPX頁面終止執行執行流程轉入另一個ASPX頁面但新的ASPX頁面仍使用前一ASPX頁面創建的應答流
   
    ps:比較ServerTransfer和ResponseRedirect的區別
   
    ()ServerTransfer在服務器端完成所以客戶端浏覽器中的URL地址是不會改變的ResponseRedirect是客戶端完成向服務器端提出新的頁面處理請求所以客戶端浏覽器中的URL地址是會改變的
   
    ()ServerTransfer在服務器端完成不需要客戶端提出請求減少了客戶端對服務器端提出請求[]
   
    ()ServerTransfer只能夠轉跳到本地虛擬目錄指定的頁面也就是工程項目中的頁面而ResponseRedirect則十分靈活可以跳轉到任何URL地址
   
    ()ServerTransfer可以將前一個頁面的各種類型的值傳到新的頁面ResponseRedirect則只能借助URL中帶參數或是結合上面四種辦法把各種類型的值傳到新的頁面
   
    優點直接在服務器端重定向使用簡單方便減少了客戶端對服務器端提出請求
   
    可以傳遞各種數據類型的值和控件的值
   
    缺點客戶端浏覽器中的URL地址是不改變會導致在新的頁面可能出現一些意想不到的問題比如如果源頁面和目的頁面不在同一個虛擬目錄或其子目錄下那麼使用相對路徑的圖片超鏈接都會導致錯誤的指向
   
    使用方法在源頁面的代碼中使用Page類的ServerTransfer跳到另一個頁面傳遞頁面數據ServerTransfer(baspxfalse
   
    在目的頁面中使用ContextHandler來接收數據FormerPage formerPage = (FormerPage)ContextHandler; 然後用formerPage的屬性和方法來獲取前一個頁面的值或者直接用ContextItems[myParameter ]
   
    例子)aaspx
   
    public string Name
   
    {
   
    get{ return LabelText;}
   
    }
   
    private void Button_Click(object sender SystemEventArgs e)
   
    {
   
    ServerTransfer(baspx
   
    }
   
    ()baspx
   
    private void Page_Load(object sender EventArgs e)
   
    {
   
    a newWeb; //實例a窗體
   
    newWeb = (source)ContextHandler;
   
    string name;
   
    name = newWebName;
   
    }
   
    以上就是常用的幾種頁面間傳值的方法我一般使用session和stringquerystring來傳值少數情況會使用到cookie本篇文章僅僅是介紹這幾種方法的使用方法內部原理沒有過多的解釋關於session的存儲方式請參見session的存儲方式和配置


From:http://tw.wingwit.com/Article/program/net/201311/13976.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.