asp.net 視圖狀態簡介

在asp.net開發的應用程序中,當某個頁面被請求時,它的類及其所包含的服務器控件會負責處理請求,呈現HTML輸出,並隨後發回客戶端.由於HTTP協議的固有特性,客戶端與服務器間的通信是無狀態且非連接的.而實際的應用程序需要狀態,以便維護同一頁面的後續調用.使用asp或其他服務器端開發平臺(如jsp,php),程序員必須負責狀態的存儲和恢復.儘管基於無狀態的協議,但以這種方式,從客戶端體驗到的是連續的執行過程,然而,這只是一種表象.

連續性所導致的這種現象,一方面與頁面的設計和工作方式有關,另一方面是asp.net頁面視圖狀態造成的.與此同時,服務器端控件也發揮着重要作用.簡而言之,在頁面將其內容呈現爲html之前,頁面要將自身及其所包含的控件的狀態信息存儲在持久性介質(通常是隱藏字段)中.當頁面回發後,其狀態會從隱藏字段中被反序列化,用於對申明在頁面佈局中的服務器控件實例進行初始化.

每個頁面實例有其特有的視圖狀態,因爲該信息嵌入在html中,這樣做的好處是,控件會以上一次創建的視圖狀態(即該頁最後一次被呈現發送到客戶端時的狀態)的值進行初始化.此外,頁面週期中還會有一個階段,將以存儲的狀態與由客戶端做出的更新合併.在回發後,頁面執行時,它會發現一個有狀態的且更新過的上下文,就像工作在連續的對點連接上一樣.

這裏做了兩個假設,第一個假設是,頁面總是投遞給自身,並攜帶着狀態信息.第二個假設是,服務器端控件必須帶有runat=server屬性,以便在頁面回發後具有"生命力".

發佈了31 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章