ASP.NET提供一個類System.Web.HttpContext ,用來表示上下文,此對象有一個屬性Items
暫存狀態就是利用HttpContext.Items屬性來存放數據
MSDN中HttpContext.Items屬性的解釋是這樣的:獲取可用於在 HTTP 請求過程中在 IHttpModule 和 IHttpHandler 之間組織和共享數據的鍵值
HttpContext.Items屬性中可以存放任何類型數據,無論這個屬性中存放什麼數據,都會在請求處理結束後自動清除,這就是暫存狀態,數據的存放時間非常短.
//例如:
//我們有一頁面A.ASPX,有一按鈕ID:Submit,點按鈕把頁面轉向b.aspx頁面 public void Submit_Click(Object sender, EventArgs E) { SqlConnection myConnection = new SqlConnection("server=(local)NetSDK;database=pubs;Trusted_Connection=yes"); SqlDataAdapter myCommand = new SqlDataAdapter("select * from Authors", myConnection); DataSet ds = new DataSet(); myCommand.Fill(ds, "Authors"); //把數據放入暫存中 Context.Items["MyData"] =ds; Server.Transfer(b.aspx); } //b.aspx頁面中 public void Page_Load(Object sender, EventArgs E) { if (!IsPostBack) { //取得暫存數據 DataSet ds=(DataSet)Context.Items["MyData"]; //其它數據過程 } }
在ibuyspyportal中我們也看到了此功能的使用:
查詢字符串包含正被請求的選項卡的 TabIndedx 和 TabId 參數。在處理請求的整個過程中,一直使用此信息篩選要顯示給用戶的數據。
http://www.ibuyspyportal.com/DesktopDefault.aspx?tabindex=1&tabid=2
要使用查詢字符串值,需要首先確保它是一個有效值,如果不是,則要進行一些錯誤處理。它並不是一大串代碼,但是您真的要在每個使用該值的頁和組件中復制它嗎?當然不!在 Portal 示例中,甚至更多的地方都涉及到它,因為一旦我們知道了 TabId,就可以預先加載其他信息。