




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、ASP.NET生命周期和狀態(tài)保持一什么是一什么是Asp.Net頁面生命周期頁面生命周期當我們在瀏覽器地址欄中輸入網址,查看頁面時,這時會向服務器端(IIS)發(fā)送一個request請求,服務器就會判斷發(fā)送過來的請求頁面, 完全識別 HTTP 頁面處理程序類后,ASP.NET 運行時將調用處理程序的 ProcessRequest 方法來處理請求,來創(chuàng)建頁面對象。通常情況下,無需更改此方法的實現,因為它是由 Page 類提供的。接下來被創(chuàng)建頁面對象的ProcessRequest方法使頁面經歷了各個階段:初始化、加載視圖狀態(tài)信息和回發(fā)數據、加載頁面的用戶代碼以及執(zhí)行回發(fā)服務器端事件。之后,頁面進入顯示
2、模式:收集更新的視圖狀態(tài),生成 HTML 代碼并隨后將代碼發(fā)送到輸出控制臺。最后,卸載頁面,并認為請求處理完畢。其中頁面對象ProcessRequest方法 完成的這一系列事件的處理過程就是Asp.Net頁面生命周期。主要步驟頁面初始化 Page_Init加載View State LoadViewState回發(fā)數據處理 LoadPostData頁面加載 Page_Load回發(fā)通知 RaisePostDataChangedEvent回發(fā)事件處理 RaisePostBackEvent頁面預渲染 Page_PreRender保存 viewstate SaveViewStatePage渲染 Page_
3、RenderPage 卸載 Page_UnLoad 主要步驟1.創(chuàng)建頁面控制樹,把它封裝成了一個方法,這個方法的名字就叫做FrameworkInitliaze()在方法內部給aspx上所有的控件都New一個實例,然后構造一個樹的結構,執(zhí)行創(chuàng)建頁面之后,頁面上才會有控件。例: 比如一個TextBox1,我們填入了”Hello World!”,在提交了頁面后,在Page_Init()里面,我們訪問到的TextBox1.Text不是我們的” Hello World!”,而是開始的”空字符串,如果TextBox1在我們設計的時候提供了默認值,這里訪問到的也就是提供的默認值,為什么呢,這就要看下一個過程
4、了.主要步驟2.判斷IspostBack,確定是否回發(fā)。 IspostBack是Page類有一個bool類型的屬性,用來判斷針對當前FORM的請求是第一次還是非第一次請求。在框架內部有很多的場景需要判斷IsPostBack,比如:LoadAllState等操作就需要在PostBack的時候進行。對于我們自己使用WebForm進行開發(fā)時,經常會在Page_Load中對IsPostBack進行判斷,因為第一次請求的時候會執(zhí)行Page_Load,在非第一次請求的時候也會執(zhí)行Page_Load。為什么對同一個Form有多次請求呢?中引入了服務器端事件,支持服務器端事件的控件,會發(fā)出對當前Form的請求
5、,這樣在很多情形下我們就需要區(qū)別是否是對這個Form的第一次請求。 主要步驟3.初始化 初始化包括三個階段:預初始化開始初始化初始化完成主要步驟1)PreInit()預初始化 A.調用OnPreInit方法引發(fā)PreInit事件 B.利用App_Themes目錄中的內容進行初始化主題。以動態(tài)現一個PageTheme屬性值,并創(chuàng)建一個編譯類的實例。 C.應用模板頁主要步驟2)開始初始化,將所創(chuàng)建的控件樹上的控件都new一個實例并賦默認值。 A.遞歸初始化Controls集合中的控件,初始化包括設置這些控件的屬性。 B.遞歸應用控件皮膚。 C.調用OnInit方法以引發(fā)自身的Init事件,接著遞歸
6、調用子控件的OnInit方法來引發(fā)他們的Init事件。 D.調用自身的TrackViewState方法重啟自身的視圖狀態(tài)跟蹤,接著遞歸調用子控件的TrackViewState方法重啟自身的視圖狀態(tài)跟蹤。3)InitComplete()初始化完成主要步驟4.加載ViewState處理回發(fā)數據: 加載頁面狀態(tài),解析隱藏域中的ViewState,ViewState保持的值賦值到對應控件中。把需要觸發(fā)事件的控件放到一個集合當中去。5.預加載(PreLoad) 頁面調用OnPreLoad方法以引發(fā)PreLoad事件,該事件表示頁面生命周期進入加載階段。對應sapx.cs中的Page_Load事件。6.加
7、載(Load) 頁面首先調用自身的OnLoad方法以引發(fā)自身的Load事件,接著遞歸調用 Contorls集合中控件的OnLoad方法以引發(fā)它們的Load事件。主要步驟7.ProcessPostData第二次處理回發(fā)數據8.觸發(fā)改變的事件和點擊事件。9.頁面加載完成10.預渲染,對空間樹進行最后一次處理11.保存當前頁面的狀態(tài)。12.頁面渲染頁面生命周期結束 頁面生命周期結束后,形成了頁面,繼續(xù)執(zhí)行管道之后的事件,執(zhí)行完畢后按照原路返回到客戶端。ASP.NET狀態(tài)保持無狀態(tài)HTTP 無狀態(tài)是指協(xié)議對于事務處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導致每次
8、連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快??蛻舳伺c服務器進行動態(tài)交互的Web應用程序出現之后,HTTP無狀態(tài)的特性嚴重阻礙了這些應用程序的實現,畢竟交互是需要承前啟后的,簡單的購物車程序也要知道用戶到底在之前選擇了什么商品。ASP.NET狀態(tài)保持ASP.NET狀態(tài)保持客戶端的狀態(tài)信息保持本質上來說有3種:隱藏域/Cookies /Querystring(URL傳參)服務器端: Session(會話)/ Application/ Caching(緩存)/DataBase(數據庫)常用的四大狀態(tài)(信息)保持方式為:ViewState 、 Cookie 服務器端;Ses
9、sion、Application 服務器端ASP.NET狀態(tài)保持ViewState(頁面級): 使用ViewState的前提:頁面上必須有一個服務器端窗體標記() 保存的數據只有在當前頁面不關閉的情況下才能夠使用。ASP.NET 的 .aspx頁面特有,頁面級的;就是在頁面上的一個隱藏域中保存客戶端單獨使用的數據的一種方式服務器端控件(除那些在查看看源文件以表單標簽存在的如:文本框,按鈕等)的值大多都會自動保存在ViewState中,非單值服務器控件的狀態(tài)也自動保存在ViewState中。存儲的值得類型為object類型 (必須可以進行序列化)應用: 大多是一些小頁面。比較大的頁面一般不會使用
10、。ASP.NET狀態(tài)保持禁用ViewState的方法:禁用單個控件的ViewState設定enableviewstate=false,禁用ViewState以后TextBox版本不受影響,Div版本受影響,因為input的value不依靠ViewState。禁用整個頁面的,在aspx的Page指令區(qū)加上EnableViewState=false 。內網系統(tǒng)、互聯(lián)網的后臺可以盡情的用ViewState。ASP.NET狀態(tài)保持Cookie:Cookie是一種能夠讓網站服務器把少量數據(4kb左右)儲存到客戶端的硬盤(設置了過期時間)或內存(不設置過期時間),并且讀取出來的一種技術。瀏覽器訪問一個站
11、點時,只將屬于當前站點的Cookie發(fā)過到服務器。(根據域名)Cookie不兼容瀏覽器(不同瀏覽器不共享Cookie文件數據)服務器端語言和客戶端語言都可以操作cookie的讀和寫都是瀏覽器做的存儲的數據類型為字符串cookie的刪除 : 服務器是不能直接的去刪除瀏覽器上的cookie的,但是可以過設置cookie的過期時間來刪除cookie(將過期時間設為-1)ASP.NET狀態(tài)保持例:寫: HttpCookie hc = new HttpCookie(test, “Hello World!); / 設cookie的過期時間。 hc.Expires = DateTime.Now.AddDay
12、s(7); Response.Cookies.Add(hc);讀: HttpCookie hc = Request.Cookiestest; if (hc!= null) Response.Write(hc.Value); ASP.NET狀態(tài)保持Session:常用于保存登錄用戶ID、驗證碼不同的瀏覽器不能共用session 因為不同的瀏覽器保存的sessionid不同存儲的數據只為某個客戶端服務 ,并且能被網站的所有頁面訪問 跟cookie類似Session只可由該會話的用戶訪問當會話過期或終止時,服務器就會清除 Session 對象Session可以存儲任何數據類型包括自定義對象銷毀: Session.Abandon();/銷毀服務器端的Session對象Session.Clear();/清空服務端的Session對象里的鍵值對,Session對象并沒有從Session池里銷毀ASP.NET狀態(tài)保持Session常用屬性、方法屬性屬性描述描述SessionID唯一用戶會話標識符TimeOut用戶超時(單位:分鐘),默認20分鐘Count會話狀態(tài)集合中的項目數方法方法描述描述Abandon方法用于顯式
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學習動力激發(fā)輔導考核試卷
- 舊貨零售店鋪選址與商圈分析考核試卷
- 拉丁語基礎與古羅馬文化考核試卷
- 智能材料設計與制造考核試卷
- 小學生經典誦讀愛國課件
- 智能餐飲顧客服務系統(tǒng)考核試卷
- ehs之家安全培訓課件
- 施工安全合同范本
- 城管部門采購合同范本
- 貨物拉運合同范本
- 《瘋狂動物城》全本臺詞中英文對照
- 建筑施工安全管理及揚塵治理檢查投標方案(技術方案)
- 六年級毛筆書法教案(下冊)
- 秘魯農村公路
- 五年級下冊勞動全冊教案人教版貴州人民出版社
- 吉利質量協(xié)議
- 空調系統(tǒng)的應急預案
- 2023玻纖增強聚氨酯門窗工程技術規(guī)程
- 急性化膿性中耳炎課件
- 食堂食品安全隱患排查報告
- 汽車維修廠車輛進出廠登記制度
評論
0/150
提交評論