国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ASP.NET中實現頁面間的參數傳遞

2019-11-14 16:37:56
字體:
來源:轉載
供稿:網友

asp.net中實現頁面間的參數傳遞

 

編寫人:CC阿爸

 

2013-10-27

 

l  近來在做泛微OA與公司自行開發的系統集成登錄的問題。在研究泛微頁面間傳遞參為參數,綜合得了解了一下現行頁面間傳參數的方式

 

經過在網大致可以歸類為以下幾種情況,現記錄下來。供日后參考

一、             使用QueryString:

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

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

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

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

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

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

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

 

二、        使用application變量是在頁面間傳遞值。

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

   (1)優點和缺點

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

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

   (2)使用方法

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

 

三、        使用Session變量

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

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

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

   (2)使用方法

    1.在源頁面的代碼中創建你需要傳遞的名稱和值構造Session變量:Session["Nmae"]="Value(OrObject)";

2.在目的頁面的代碼使用Session變量取出傳遞的值。Result = Session["Nmae"]

四、        使用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 = newHttpCookie("myCookie","Hello,Cookie!");
    Response.Cookies.Add(cookie);
    2.在目的頁面的代碼使用Cookie對象取出傳遞的值:Result = 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。

六、        使用POST方式來傳遞參數值(泛微即采用該模式傳集成登錄中設置的用戶名和密碼)

先簡單的介紹一下get與post

l  Get:是以實體的方式得到由請求URI所指定資源的信息,如果請求URI只是一個數據產生過程,那么最終要在響應實體中返回的是處理過程的結果所指向的資源,而不是處理過程的描述。

l  Post:用來向目的服務器發出請求,要求它接受被附在請求后的實體,并把它當作請求隊列中請求URI所指定資源的附加新子項,Post被設計成用統一的方法實現下列功能:

1.  對現有資源的解釋

2.  向電子公告欄、新聞組、郵件列表或類似討論組發信息。

3.   提交數據塊

4.   通過附加操作來擴展數據庫

     從從上面描述可以看出,Get是向服務器發索取數據的一種請求;而Post是向服務器提交數據的一種請求,要提交的數據位于信息頭后面的實體中。

HTTP請求:get與post方法的區別

l  相同點;

 Get與post(對于“post”除非相應里有cache-control或者expires頭域指示其相應不可緩存)請求的相應是可緩存的;

l   不同點:

1.  Get是從服務器上獲取數據,post是向服務器傳送數據

2.  Get是把參數數據隊列加到提交表單的action屬性所指定的URL中,值和表單中各個字段一一對應,在URL中可以看到,post是通過HTTP post機制,將表單內各個字段與其內容放置在html header內一起傳送到action屬性所指的URL地址,用戶看不到這個過程;

3.  get傳送的數據量較小,不能大于1024kb;post傳送的數據量較大,一般被默認為不受限制的。但理論上,2G

4.  get安全性非常低;post安全性較高;

5.  get適用于多請求,而保留post僅用于更新站點;

6.  在form提交的時候,如果不指定method,則默認為get請求,form中提交的數據將會附加在url之后,以?與URL分開。字母數字字符原樣發送,但空格轉換為“+”號,其它符號轉換為%xx,其中xx為該符號為16進制表示的ASCII(或ISO Latin-1)值;

7.  get請求提交的數據放置在HTTP請求協議頭中,而post提交的數據則放在實體數據數據中;

 

在表單中適用“post”和“get”區別

                        在form里面,可以適用post也可以適用get。它們都是method的合法取值。但是,post和gei方法在適用上至少兩點不同;

1.   get方法通過URL請求來傳遞用戶的輸入。Post方法通過另外的形式。

2.   get方式的提交需要用Request.QueryString來取得變量的值,而post方式提交時,必須通過Request.Form來訪問提交的內容,如:

Request.Form["參數名"] 、Request["參數名"]、Request.Param["參數名"]


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 彭泽县| 化州市| 中西区| 胶南市| 土默特右旗| 嘉定区| 大方县| 万盛区| 怀安县| 自贡市| 兴仁县| 比如县| 兴国县| 遂宁市| 镇江市| 宁海县| 古交市| 新疆| 鄂尔多斯市| 博乐市| 桑日县| 精河县| 喜德县| 武胜县| 台州市| 承德市| 威海市| 元朗区| 如东县| 韶关市| 洪洞县| 罗定市| 历史| 临沭县| 德昌县| 巩义市| 宜阳县| 永定县| 澜沧| 广安市| 佳木斯市|