成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解ASP.NET加載ViewState

開發 后端
本文介紹ASP.NET加載ViewState,講述了頁中從初始化到顯示的全過程事件,翻譯出來以饗各位。

大家都知道,在ASP.NET上進行Web編程中了解頁面中各事件的執行順序是非常有用的,可以有的放矢的將自己的一些處理程序放到指定的位置,以便取得正確的結果。

初始化

當頁面被提交請求第一個方法永遠是構造函數。您可以在構造函數里面初始一些自定義屬性或對象,不過這時候因為頁面還沒有被完全初始化所以多少會有些限制。特別地,您需要使用HttpContext對象。當前可以使用的對象包括QueryString, Form以及Cookies集合,還有Cache對象。注意:在構造函數里是不允許使用Session的。

下一個將執行的方法是AddParsedSubObject方法,這個方法將添加所有獨立的控件并把頁面組成一個控件集合樹,這個方法經常被一些高級的頁面模板解決方案(Page Template Solutions)重寫以便添加頁面內容到頁面模板(Page Template)中一些特殊的控件中。這個方法遞歸應用到所有的頁面控件及相應的的每個子控件,所有的控件都是在這個方法中開始最早的初始化。

頁面類中下一個將執行的方法是DeterminePostBackMode。這個方法允許您修改IsPostBack的值及相關的事件。如果您需要從數據庫中加載ViewState這個方法將特別有用,因為ViewState只有在IsPostBack為真的情況下才會進行恢復。返回空將會導致強制執行非回傳,返回Request.Form則強制執行一個回傳。除非在特殊情況下,否則并不建議去操作這個,因為這個還會影響其他的事件。

下一個將要執行的方法是OnInit方法,一般這是第一個真正被使用的方法。這個方法觸發時,所有頁面定義中的控件執行初始化,這意味著所有在頁面中定義的值應用到相應的控件上。不過,ViewState和傳回的值還不會應用到控件上,因此,任何被代碼或用戶改變的值還沒有被恢復到控件上。這個方法通常是最好的創建、重創建動態控件的好地方。

恢復及加載

下一個方法, LoadPageStateFromPersistenceMedium只會在頁面被回傳的時候才會被執行。如果因為使用Session或自定義存儲方式,您修改了后面將要提到的影響ViewState保存方式的方法SavePageStateToPersistenceMedium,則這個方法需要被重寫。默認的實現中ViewState是一種Base64格式編碼,并且被保存在頁面的隱藏域中,您可以使用這篇文章中提及的方法修改ViewState 按以上兩種方式保存。注意:這個方法并沒有真正加載ViewState到頁面或頁面控件中。

當得到ViewState后,下一個方法LoadViewSate,將以遞歸的方式恢復ViewState到頁面及各個頁面控件或子控件中。這個方法執行后,每個控件都將恢復到上一次的狀態,但是用戶提交的數據還沒有應用到控件上,因為他們不是ViewState的一部分。這個方法主要用于恢復您在其他事件中動態生成的控件的值,他們的值是您手動保存在ViewSate中,并且現在已經失效。

下一個方法是ProcessPostData,這個方法也同樣是回傳的時候才會被執行,并且不允許被重寫,這個是頁面基類的私有方法。這個方法通過匹配控件的名稱恢復相應的用戶提交的控件的值,到這一步意味著整個頁面都已經被完全恢復了。唯一要記住的是所有動態控件的創建必須在這個方法之前。這個方法也是記錄后面的改變事件的方法。

下一個方法是OnLoad方法,通常這是用得最多的方法,因為這個方法是頁面生存期第一個恢復了所有值的地方。大多數代碼根據判斷 IsPostBack來決定是否重新設置控件狀態。您也可以在這個方法中調用Validate并且檢查IsValid的值。也可以在這個方法中創建動態控件,并且該控件的所有的方法都會被執行以追上當前頁面的狀態包括ViewSate,不過不包括回傳的值。

事件處理

下一個方法還是 ProcessPostData,實際上就是前一個方法的另一次調用,它仍然是只在回傳的時候執行并且由于是私有方法不可以被重寫。如果您是第一次看頁面的運行軌跡也許會覺得這個方法有些多余。但實際上這個方法是必要的因為在OnLoad中創建的動態控件也需要他們回傳的值。任何在這以后創建的控件將可以得到他們的ViewState,但是不能再得到他們的回傳的值,并且不會觸發任何值改變事件(Change Event)。

下一個方法,RaiseChangedEvents,也是只在回傳頁面中執行,并且也因為是基類的私有方法所有不能被繼承。在整個頁面生存期中,是在這兒根據之前的ProcessPostData記錄的控件的值和提交的值是否不同來觸發值改變事件。您也許需要調用Validate或者檢查 IsValid的值。這里并沒有特別的說明多個值改變事件的執行先后順序。

下一個方法,RaisePostBackEvent,同樣是因為是基類的私有方法不能被繼承,同樣也是只在回傳頁面中執行。除非使用了 AutoPostBack,不然這是實際提交表單事件執行的地方,特別是按鈕或者其實使用Javascript提交表單等。如果還沒有被手動調用過并且使用了驗證控件,那么Validate會被調用。注意IE中有個BUG有時會允許提交但卻不觸發任何事件。

下一個方法是OnPreRender,一般這是在客戶端展現頁面之前改變頁面及其控件的最后一次機會。您也可以在這個方法里面創建動態控件,并且所有的方法都會被執行以追上當前頁面的狀態包括ViewSate,但是私有方法將不會被執行,這意味著不會有回傳的值并且不會有事件觸發。由于IE中的 BUG,這是一個沒有事件趕上PostBack的好地方。

保存及顯示

下一個方法是SaveViewState,不論是否是回傳頁面,均會遞歸的執行以保存頁面及其所有控件的ViewState。ViewState基本上保存所有與定義在aspx中的原始值不同的值,不管是被代碼還是用戶所改變。注意控件值是根據他們在頁面的控件樹中的位置來保存的,所以如果動態控件后來加到了錯誤的位置將會導致混亂。

下一個方法是SavePageStateToPersistenceMedium真正的保存頁面的ViewSate。這個方法隨同 LoadPageStateFromPersistenceMediumg 一起被重寫以便保存ViewState到Session或其它自定義數據,而不是用隱藏域。這對于低帶寬的用戶來說是很有幫助的。并且對于移動設備來說, Session是默認設置。下面這篇文章描述了使用以上兩種方式保存ViewState的具體細節。注意在ASP.NET中有個Bug:ASP.NET要求必須提交__viewstate字段,即使是空的。

下一個方法是Render方法,該方法遞歸的創建并發送相應控件的html給瀏覽器。這個方法被一些頁面模板方案重寫以添加一些通用的頁面頭與腳而不使用服務器控件,他們總是有一些額外的東西。注意這兒的修改只能使用純HTML,因為控件在這兒已經被生成了。您可以用 StringBuilder,StringWriter,HtmlTextWriter捕獲相應的HTML輸出。

最后的方法是OnUnload,這個方法會調用相應的Dispose方法。這個方法提供機會以便清空該頁面中使用的非托管資源,如關閉打開的文件句柄,以前打開的數據庫連接等。注意這個方法是在頁面已經發送到客戶端以后執行的,所以它只有影響服務器對象,并且它不會顯示在頁面的顯示軌跡中。這就是頁面的生存期,對于每一次請求都是這么運行的。

  1. ConstructorAlwaysAll  
  2. AddParsedSubObjectAlwaysAll  
  3. DeterminePostBackModeAlwaysPage  
  4. OnInitAlwaysAll  
  5. LoadPageStateFromPersistenceMediumPostBackPage  
  6. LoadViewStatePostBackAll  
  7. ProcessPostData1PostBackPage  
  8. OnLoadAlwaysAll  
  9. ProcessPostData2PostBackPage  
  10. RaiseChangedEventsPostBackPage  
  11. RaisePostBackEventPostBackPage  
  12. OnPreRenderAlwaysAll  
  13. SaveViewStateAlwaysAll  
  14. SavePageStateToPersistenceMediumAlwaysPage  
  15. RenderAlwaysAll  
  16. OnUnloadAlwaysAll 

以上介紹ASP.NET加載ViewState

【編輯推薦】

  1. ASP.NET的DataList和Repeater控件
  2. 淺析ASP.NET的IIS映射
  3. 概述ASP.NET狀態類型
  4. 淺談ASP.NET和Web服務器
  5. ASP.NET的EnableViewState屬性
責任編輯:佚名 來源: IT168
相關推薦

2009-07-28 16:42:02

ViewState技術ASP.NET應用

2009-08-04 17:00:09

ASP.NET禁用Vi

2009-08-04 12:29:57

ViewState概念ASP.NET

2009-08-04 17:20:37

PostBack和ViASP.NET

2009-08-05 15:01:04

ASP.NET應用Vi

2009-07-20 15:19:52

ViewState本質ASP.NET

2009-07-29 16:08:07

ASP和ASP.NET

2009-06-09 11:37:51

ViewStateViewDataASP.NET

2009-07-22 16:25:41

ASP.NET AJA

2009-07-28 16:57:50

ASP.NET Ses

2009-07-24 10:14:22

ASP.NET開發

2009-08-05 11:14:33

ASP.NET ISA

2009-07-23 13:19:51

2009-07-23 13:09:23

2009-08-19 13:44:00

ASP.NET Lis

2009-08-04 10:43:59

ASP.NET控件開發

2009-08-04 18:10:35

ASP.NET動態編譯

2009-08-05 18:14:52

ASP.NET 2.0

2010-03-19 09:17:16

ASP.NET MVC

2009-07-23 13:26:21

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 狠狠爱免费视频 | 欧美日韩国产一区二区三区 | 日韩激情视频一区 | 全免费a级毛片免费看视频免费下 | 精品亚洲一区二区三区四区五区 | 91精品国产色综合久久 | 欧美videosex性极品hd | 国产女人与拘做视频免费 | 成人动漫视频网站 | 国产婷婷精品 | 欧美高清成人 | 亚洲精品久久久久久久久久久久久 | 久草在线 | 一区二区三区免费 | 国产精品一区二区三区久久久 | 欧美精品一区在线发布 | 麻豆国产一区二区三区四区 | www.成人久久| 日日操夜夜摸 | 久草福利| 中国一级特黄毛片大片 | 欧美日本韩国一区二区三区 | 一区二区三区四区国产 | www.亚洲一区 | 国产高清精品一区二区三区 | 国产成人综合亚洲欧美94在线 | 欧美精品二区三区 | 色婷婷婷婷色 | 99re在线| 国产999精品久久久久久 | 日韩精品一区二区三区四区视频 | 黄视频国产| 国产成人精品一区二区 | 成人精品一区亚洲午夜久久久 | 一区二区在线不卡 | 激情五月婷婷综合 | 久久国产一区二区 | 日本黄色大片免费看 | 精品免费视频 | 婷婷桃色网 | 欧美高清dvd |