ASP.NET多種不同頁面間數據傳遞的方法

来源:http://www.cnblogs.com/shouce/archive/2016/01/15/5132220.html
-Advertisement-
Play Games

1. Get(即使用QueryString顯式傳遞) 方式:在url後面跟參數。 特點:簡單、方便。 缺點:字元串長度最長為255個字元;數據泄漏在url中。 適用數據:簡單、少量、關鍵的數據。 適用範圍:傳遞給自己、傳遞給另一個目標頁面;常用於2個頁面間傳遞數據。 用法:例如:url後加?User...


1. Get(即使用QueryString顯式傳遞)
     方式:在url後面跟參數。
     特點:簡單、方便。
     缺點:字元串長度最長為255個字元;數據泄漏在url中。
     適用數據:簡單、少量、關鍵的數據。
     適用範圍:傳遞給自己、傳遞給另一個目標頁面;常用於2個頁面間傳遞數據。
     用法:例如:url後加?UserID=…,跳轉到目標頁面,目標頁面在伺服端可用Request.QueryString["InputText"]獲取其指定參數值。
2. Post
     方式:通用的方式。利用form提交。
     特點:最常用的方法。常用技巧是把隱秘的數據存在隱藏域中由form提交。
     適用數據:大量數據,包括文件上傳。
     適用範圍:同Get方法
     用法:在客戶端form指定action目標後submit、在asp.net的伺服端中使用server.Transfer(url)提交;在伺服端中用Request.Form["FormFieldID"]獲取。 
3. 頁面對象的屬性
     方式:asp.net特有方式 。利用HttpContext獲取發請求的頁面的信息。
     特點:可以直接存儲對象。
     缺點:註意強制轉換的類型要正確。
     適用數據:各種數據。
     適用範圍:頁面之間傳遞複雜數據。
     用法:獲取Context.Handler將其轉換為發請求的頁面的實例,隨後就可以輕鬆訪問其form中的欄位、甚至屬性。其中的Context是指HttpContext對象,Handler是其屬性,Context.Handler的意思可以理解為創建源頁類的實例變數,而得到此實例之後,就可以直接訪問其中的屬性和Public方法了。
4. cookie
     方式:將數據存在客戶端的經典方法。
     缺點:安全性低、受客戶端設置限制、一個站點僅存20個cookie,每個容量4096位元組。
     有效期:自定義或被用戶清除
     適用數據:用戶的會話數據(一般是用戶名,用戶的個性化設置信息等)
     適用範圍:單個用戶、整個站點所有頁面
     用法:引用Request.Cookies(讀取信息)、Response.Cookies(寫入信息)、或用HttpCookieCollection直接創建Cookie對象。
5. Session
     方式:將用戶數據存儲在伺服端。
     特點:asp.net中可以設置session的存儲方式、位置、SessionID的保存是否依賴cookie。
             可以直接存儲對象。 
     缺點:asp.net中有失效的隱患
     有效期:用戶活動時間+自定義延遲。
     適用數據:用戶的特有信息。
     適用範圍:單個用戶、整個站點所有頁面。
     用法:Session["CollectionName"] = value/object;
6. Cache
     方式:將用戶數據存儲在伺服端數據緩存中。 
     特點:可以大大提高效率。 可以直接存儲對象。
     缺點:數據更新不及時。
     有效期:應用程式生命周期或自定義。
     適用數據:所有頁面、所有用戶都可以共用的數據。
     用法:Cache["CollectionName"] = value|object;

http://www.cnblogs.com/sosoft/

7. Appliction
     方式: 將數據存儲於此,相當於全局變數。 
     特點:可以直接存儲對象。整個站點的共用數據。
     有效期:應用程式生命周期。
     適用數據:所有頁面、所有用戶共用的數據。
     用法:Appliction["CollectionName"] = value|object;
8. ViewState
     方式:asp.net特有機制,用來恢復頁面狀態。 
     特點:將頁面各控制項及其所存數據序列化存在name為_ViewState的隱藏域中。
     缺點:存在HTML中,安全性較低。可以設置加密和驗證,但數據量會大增、效率有影響。
     適用數據:頁面PostBack需要保存的數據,數據太大會影響頁面發送效率。
     適用範圍:頁面自身數據保存。
     用法:ViewState["CollectionName"] = value;
9. Static
     方式: 將數據存於靜態變數中。 
     特點:利於提高效率。
     缺點:若用不好會致使用戶或頁面間數據紊亂,造成極大的隱患。建議只賦值一次,絕對禁止為單個用戶而更改此值。
     適用數據:所有用戶共用的數據。
     適用範圍:此類所有的頁面實例。
     用法:在class中聲明靜態變數。
整理:
     頁面自身保存數據可用的有ViewState,static變數。
     頁面之間傳遞數據常用get,post,HttpContext,當然可以變通一下用於自身數據保存。
     單用戶的所有頁面數據共用常用session,cookie,當然也可以應用在以上兩種情況。
     整個應用程式(所有用戶所用頁面)的數據共用常用Appliction,cache,static變數。 
總結:    
     當然可以變通下靈活應用來解決問題,但是要選擇合適的,常見到濫用Get和Session。
     建議在用Request的時候要指明所取的集合,比如Get方法傳來的參數從QueryString集合取,Post的從Form取,cookie從Cookies里取。雖然用Request[]集合,以上幾種都可以取到,但是卻造成性能上的浪費,本來直接在Form集合中,卻遍歷了QueryString,Form,Cookies等集合才取出來。
ps:在電腦的世界里,凡是提供服務的一方我們稱為伺服端(server),而接受服務的另一方我們稱作客戶端(client)。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、SwipeBackLayout項目地址:https://github.com/ikew0ng/SwipeBackLayout2、用法android studiocompile 'me.imid.swipebacklayout.lib:library:1.0.0'項目實例package com.e...
  • 什麼是looksalive check和is alive check SQL Server故障轉移集群是建立在windows集群服務上的一種熱備的高可用方案。在集群運行過程中,windows集群服務定期檢測節點的資源健康狀態,如果發生了故障,會根據預先定義的故障轉移策略把SQL Server服務從....
  • 一、什麼是觸發器簡單的說,就是一張表發生了某件事(插入、刪除、更新操作),然後自動觸發了預先編寫好的若幹條SQL語句的執行;二、特點及作用特點:觸發事件的操作和觸發器里的SQL語句是一個事務操作,具有原子性,要麼全部執行,要麼都不執行;作用:保證數據的完整性,起到約束的作用;三、例子:創建觸發器,記...
  • 1 create procedure usp_CallWebServices 2 ( 3 @parameter nvarchar(500)=null 4 ) 5 as 6 Declare @obj int 7 Declare @SvercieUrl nvarchar(200) 8 ...
  • 流程式控制制 1.If,then,else,elsif(不是elseif) if a='1' then null; endif; 2.Case 簡單case表達式: 搜索型Case表達式: 3.goto語句 begin if true then goto label2; end if; > SYS.DB...
  • 剛逛論壇,發現一個這樣的問題,如果不建立一個新的月份的表,可以用CET來解決。給定一張表(列有月份,銷售額),要求查詢出月份、本月銷售額、上月銷售額這三個結果,如果當月上個月的銷售額不存在就顯示為“*”。if exists (select * from sysobjects where id = o...
  • 工作和學習中常常會遇到一行要分割成多行數據的情況,在此整理一下做下對比。 單行拆分 如果表數據只有一行,則可以直接在原表上直接使用connect by+正則的方法,比如: select regexp_substr('444.555.666', '[^.]+', 1, level) col from ...
  • 前言 大家應該都知道Memcached要想實現分散式只能在客戶端來完成,目前比較流行的是通過一致性hash演算法來實現.常規的方法是將server的hash值與server的總台數進行求餘,即hash%N,這種方法的弊端是當增減伺服器時,將會有較多的緩存需要被重新分配且會造成緩存分配不均勻的情況(有....
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...