生命周期和狀態(tài)保持_第1頁(yè)
生命周期和狀態(tài)保持_第2頁(yè)
生命周期和狀態(tài)保持_第3頁(yè)
生命周期和狀態(tài)保持_第4頁(yè)
生命周期和狀態(tài)保持_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、ASP.NET生命周期和狀態(tài)保持一什么是一什么是Asp.Net頁(yè)面生命周期頁(yè)面生命周期當(dāng)我們?cè)跒g覽器地址欄中輸入網(wǎng)址,查看頁(yè)面時(shí),這時(shí)會(huì)向服務(wù)器端(IIS)發(fā)送一個(gè)request請(qǐng)求,服務(wù)器就會(huì)判斷發(fā)送過(guò)來(lái)的請(qǐng)求頁(yè)面, 完全識(shí)別 HTTP 頁(yè)面處理程序類后,ASP.NET 運(yùn)行時(shí)將調(diào)用處理程序的 ProcessRequest 方法來(lái)處理請(qǐng)求,來(lái)創(chuàng)建頁(yè)面對(duì)象。通常情況下,無(wú)需更改此方法的實(shí)現(xiàn),因?yàn)樗怯?Page 類提供的。接下來(lái)被創(chuàng)建頁(yè)面對(duì)象的ProcessRequest方法使頁(yè)面經(jīng)歷了各個(gè)階段:初始化、加載視圖狀態(tài)信息和回發(fā)數(shù)據(jù)、加載頁(yè)面的用戶代碼以及執(zhí)行回發(fā)服務(wù)器端事件。之后,頁(yè)面進(jìn)入顯示

2、模式:收集更新的視圖狀態(tài),生成 HTML 代碼并隨后將代碼發(fā)送到輸出控制臺(tái)。最后,卸載頁(yè)面,并認(rèn)為請(qǐng)求處理完畢。其中頁(yè)面對(duì)象ProcessRequest方法 完成的這一系列事件的處理過(guò)程就是Asp.Net頁(yè)面生命周期。主要步驟頁(yè)面初始化 Page_Init加載View State LoadViewState回發(fā)數(shù)據(jù)處理 LoadPostData頁(yè)面加載 Page_Load回發(fā)通知 RaisePostDataChangedEvent回發(fā)事件處理 RaisePostBackEvent頁(yè)面預(yù)渲染 Page_PreRender保存 viewstate SaveViewStatePage渲染 Page_

3、RenderPage 卸載 Page_UnLoad 主要步驟1.創(chuàng)建頁(yè)面控制樹,把它封裝成了一個(gè)方法,這個(gè)方法的名字就叫做FrameworkInitliaze()在方法內(nèi)部給aspx上所有的控件都New一個(gè)實(shí)例,然后構(gòu)造一個(gè)樹的結(jié)構(gòu),執(zhí)行創(chuàng)建頁(yè)面之后,頁(yè)面上才會(huì)有控件。例: 比如一個(gè)TextBox1,我們填入了”Hello World!”,在提交了頁(yè)面后,在Page_Init()里面,我們?cè)L問(wèn)到的TextBox1.Text不是我們的” Hello World!”,而是開始的”空字符串,如果TextBox1在我們?cè)O(shè)計(jì)的時(shí)候提供了默認(rèn)值,這里訪問(wèn)到的也就是提供的默認(rèn)值,為什么呢,這就要看下一個(gè)過(guò)程

4、了.主要步驟2.判斷IspostBack,確定是否回發(fā)。 IspostBack是Page類有一個(gè)bool類型的屬性,用來(lái)判斷針對(duì)當(dāng)前FORM的請(qǐng)求是第一次還是非第一次請(qǐng)求。在框架內(nèi)部有很多的場(chǎng)景需要判斷IsPostBack,比如:LoadAllState等操作就需要在PostBack的時(shí)候進(jìn)行。對(duì)于我們自己使用WebForm進(jìn)行開發(fā)時(shí),經(jīng)常會(huì)在Page_Load中對(duì)IsPostBack進(jìn)行判斷,因?yàn)榈谝淮握?qǐng)求的時(shí)候會(huì)執(zhí)行Page_Load,在非第一次請(qǐng)求的時(shí)候也會(huì)執(zhí)行Page_Load。為什么對(duì)同一個(gè)Form有多次請(qǐng)求呢?中引入了服務(wù)器端事件,支持服務(wù)器端事件的控件,會(huì)發(fā)出對(duì)當(dāng)前Form的請(qǐng)求

5、,這樣在很多情形下我們就需要區(qū)別是否是對(duì)這個(gè)Form的第一次請(qǐng)求。 主要步驟3.初始化 初始化包括三個(gè)階段:主要步驟1)PreInit()預(yù)初始化 A.調(diào)用OnPreInit方法引發(fā)PreInit事件 B.利用App_Themes目錄中的內(nèi)容進(jìn)行初始化主題。以動(dòng)態(tài)現(xiàn)一個(gè)PageTheme屬性值,并創(chuàng)建一個(gè)編譯類的實(shí)例。 C.應(yīng)用模板頁(yè)主要步驟2)開始初始化,將所創(chuàng)建的控件樹上的控件都new一個(gè)實(shí)例并賦默認(rèn)值。 A.遞歸初始化Controls集合中的控件,初始化包括設(shè)置這些控件的屬性。 B.遞歸應(yīng)用控件皮膚。 C.調(diào)用OnInit方法以引發(fā)自身的Init事件,接著遞歸調(diào)用子控件的OnInit方法

6、來(lái)引發(fā)他們的Init事件。 D.調(diào)用自身的TrackViewState方法重啟自身的視圖狀態(tài)跟蹤,接著遞歸調(diào)用子控件的TrackViewState方法重啟自身的視圖狀態(tài)跟蹤。3)InitComplete()初始化完成主要步驟4.加載ViewState處理回發(fā)數(shù)據(jù): 加載頁(yè)面狀態(tài),解析隱藏域中的ViewState,ViewState保持的值賦值到對(duì)應(yīng)控件中。把需要觸發(fā)事件的控件放到一個(gè)集合當(dāng)中去。5.預(yù)加載(PreLoad) 頁(yè)面調(diào)用OnPreLoad方法以引發(fā)PreLoad事件,該事件表示頁(yè)面生命周期進(jìn)入加載階段。對(duì)應(yīng)sapx.cs中的Page_Load事件。6.加載(Load) 頁(yè)面首先調(diào)用

7、自身的OnLoad方法以引發(fā)自身的Load事件,接著遞歸調(diào)用 Contorls集合中控件的OnLoad方法以引發(fā)它們的Load事件。主要步驟7.ProcessPostData第二次處理回發(fā)數(shù)據(jù)8.觸發(fā)改變的事件和點(diǎn)擊事件。9.頁(yè)面加載完成10.預(yù)渲染,對(duì)空間樹進(jìn)行最后一次處理11.保存當(dāng)前頁(yè)面的狀態(tài)。12.頁(yè)面渲染頁(yè)面生命周期結(jié)束 頁(yè)面生命周期結(jié)束后,形成了頁(yè)面,繼續(xù)執(zhí)行管道之后的事件,執(zhí)行完畢后按照原路返回到客戶端。ASP.NET狀態(tài)保持無(wú)狀態(tài)HTTP 無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方

8、面,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快。客戶端與服務(wù)器進(jìn)行動(dòng)態(tài)交互的Web應(yīng)用程序出現(xiàn)之后,HTTP無(wú)狀態(tài)的特性嚴(yán)重阻礙了這些應(yīng)用程序的實(shí)現(xiàn),畢竟交互是需要承前啟后的,簡(jiǎn)單的購(gòu)物車程序也要知道用戶到底在之前選擇了什么商品。ASP.NET狀態(tài)保持ASP.NET狀態(tài)保持客戶端的狀態(tài)信息保持本質(zhì)上來(lái)說(shuō)有3種:隱藏域/Cookies /Querystring(URL傳參)服務(wù)器端: Session(會(huì)話)/ Application/ Caching(緩存)/DataBase(數(shù)據(jù)庫(kù))常用的四大狀態(tài)(信息)保持方式為:ViewState 、 Cookie 服務(wù)器端;Session、Applicati

9、on 服務(wù)器端ASP.NET狀態(tài)保持ViewState(頁(yè)面級(jí)): 使用ViewState的前提:頁(yè)面上必須有一個(gè)服務(wù)器端窗體標(biāo)記() 保存的數(shù)據(jù)只有在當(dāng)前頁(yè)面不關(guān)閉的情況下才能夠使用。ASP.NET 的 .aspx頁(yè)面特有,頁(yè)面級(jí)的;就是在頁(yè)面上的一個(gè)隱藏域中保存客戶端單獨(dú)使用的數(shù)據(jù)的一種方式服務(wù)器端控件(除那些在查看看源文件以表單標(biāo)簽存在的如:文本框,按鈕等)的值大多都會(huì)自動(dòng)保存在ViewState中,非單值服務(wù)器控件的狀態(tài)也自動(dòng)保存在ViewState中。存儲(chǔ)的值得類型為object類型 (必須可以進(jìn)行序列化)應(yīng)用: 大多是一些小頁(yè)面。比較大的頁(yè)面一般不會(huì)使用。ASP.NET狀態(tài)保持禁用

10、ViewState的方法:禁用單個(gè)控件的ViewState設(shè)定enableviewstate=false,禁用ViewState以后TextBox版本不受影響,Div版本受影響,因?yàn)閕nput的value不依靠ViewState。禁用整個(gè)頁(yè)面的,在aspx的Page指令區(qū)加上EnableViewState=false 。內(nèi)網(wǎng)系統(tǒng)、互聯(lián)網(wǎng)的后臺(tái)可以盡情的用ViewState。ASP.NET狀態(tài)保持Cookie:Cookie是一種能夠讓網(wǎng)站服務(wù)器把少量數(shù)據(jù)(4kb左右)儲(chǔ)存到客戶端的硬盤(設(shè)置了過(guò)期時(shí)間)或內(nèi)存(不設(shè)置過(guò)期時(shí)間),并且讀取出來(lái)的一種技術(shù)。瀏覽器訪問(wèn)一個(gè)站點(diǎn)時(shí),只將屬于當(dāng)前站點(diǎn)的Co

11、okie發(fā)過(guò)到服務(wù)器。(根據(jù)域名)Cookie不兼容瀏覽器(不同瀏覽器不共享Cookie文件數(shù)據(jù))服務(wù)器端語(yǔ)言和客戶端語(yǔ)言都可以操作cookie的讀和寫都是瀏覽器做的存儲(chǔ)的數(shù)據(jù)類型為字符串cookie的刪除 : 服務(wù)器是不能直接的去刪除瀏覽器上的cookie的,但是可以過(guò)設(shè)置cookie的過(guò)期時(shí)間來(lái)刪除cookie(將過(guò)期時(shí)間設(shè)為-1)ASP.NET狀態(tài)保持例:寫: HttpCookie hc = new HttpCookie(test, “Hello World!); / 設(shè)cookie的過(guò)期時(shí)間。 hc.Expires = DateTime.Now.AddDays(7); Response

12、.Cookies.Add(hc);讀: HttpCookie hc = Request.Cookiestest; if (hc!= null) Response.Write(hc.Value); ASP.NET狀態(tài)保持Session:常用于保存登錄用戶ID、驗(yàn)證碼不同的瀏覽器不能共用session 因?yàn)椴煌臑g覽器保存的sessionid不同存儲(chǔ)的數(shù)據(jù)只為某個(gè)客戶端服務(wù) ,并且能被網(wǎng)站的所有頁(yè)面訪問(wèn) 跟cookie類似Session只可由該會(huì)話的用戶訪問(wèn)當(dāng)會(huì)話過(guò)期或終止時(shí),服務(wù)器就會(huì)清除 Session 對(duì)象Session可以存儲(chǔ)任何數(shù)據(jù)類型包括自定義對(duì)象銷毀: Session.Abandon();/銷毀服務(wù)器端的Session對(duì)象Session.Clear();/清空服務(wù)端的Session對(duì)象里的鍵值對(duì),Session對(duì)象并沒有從Session池里銷毀ASP.NET狀態(tài)保持Session常用屬性、方法屬性屬性描述描述SessionID唯一用戶會(huì)話標(biāo)識(shí)符TimeOut用戶超時(shí)(單位:分鐘),默認(rèn)20分鐘Count會(huì)話狀態(tài)集合中的項(xiàng)目數(shù)方法方法描述描述Abandon方法用于顯式結(jié)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論