国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

掌握Web窗體的生命周期與狀態管理

2024-07-21 02:15:43
字體:
來源:轉載
供稿:網友


    如果你具有使用 active server pages (asp) 的經驗,你將認識到 asp 是線性處理模型。asp 頁是按從上到下的順序處理的。asp 代碼和靜態 html 的每一行都按其在文件中的顯示順序進行處理。在往返行程中用戶操作導致頁被發送到服務器。因為此操作導致往返行程,所以服務器必須重新創建該頁。在重新創建該頁后,將通過與以前相同的從上到下的順序對該頁進行處理,因此,該頁未表現出真正的事件驅動行為。若要創建事件驅動體驗,你需要顯式設計它。此外,你必須在最基本的級別上顯式維護頁和控件狀態。此模型限制了可以組合的用戶界面的豐富程度,并且此模型增加了需要支持它的代碼的復雜性。

  與此相比,傳統 visual basic 應用程序中的事件驅動模型包含可編程的元素,這些元素可被初始化并在窗體上顯示。用戶與這些元素進行交互,而這又導致引發調用事件處理程序的事件。此模型支持真正的事件驅動行為,這在設計上極大拓寬了可以組合的用戶界面的豐富程度,并且降低了需要支持它的代碼的復雜性。

  asp.net 通過模擬事件驅動模型的行為代替了asp 的線性處理模型。提供 asp.net 頁框架以隱式地為你建立事件和事件處理程序的關聯。利用該頁框架,你可以很容易地創建響應用戶操作的用戶界面。

  首先,我們必須先了解一下web窗體的生命周期,才能更好的了解web窗體的狀態管理。

  一個web窗體的生命周期類似于在服務器中運行的web進程的生命周期。一個web窗體從實例化分配內存空間到處理結束釋放內存,一般經歷下面4個步驟:初始化、頁面裝載、事件處理和資源清理。

  (1)頁面初始化

  當頁面被初始化時,發生第一個事件page_init。系統會執行創建和設置一個例示所需要的所有初始化步驟。

  (2)頁面裝載

  頁面裝載在初始化之后,所發生的事件叫做 page_load,它的用途如下:

  根據 page.ispostback 屬性檢查頁面是不是第一次被處理;

  第一次處理頁面時執行數據捆綁,或者在以后的循環過程中重新判斷數據捆綁表達式;

  讀取和更新控件屬性;

  恢復在保存步驟中所保存的前一個客戶請求的狀態;

  (3)事件處理

  web窗體上的每個動作都激活一個到達服務器的事件。一個web窗體有兩個視圖:一個客戶視圖和一個服務器視圖。所有的數據處理都在服務器上進行。當通過點擊鼠標或其它方法引起一個事件時,事件就到達服務器并返回相應的數據。

  (4)資源清理

  最后一步發生于一個窗體完成了它的任務并且準備卸載的時候,這時激活page_unload事件,完成最后的資源清理工作,比如:關閉文件,關閉數據庫連接,丟棄對象。

  我們知道基于web的訪問方式是斷開式的,web頁面是無狀態性的。而于asp中的線性驅動方式不同的是asp.net采用的是事件驅動模式,那么 ,web窗體是怎么樣做到asp.net頁面狀態的維護的呢?在asp.net中引入了一個概念:view state,從而用view state來保存頁面的狀態信息。

  除了第一次的訪問請求是有基類生成以外,以后每次客戶端的回傳都是根據客戶端傳來的頁面狀態來重新創建頁面。而頁面的各個狀態信息就保存在客戶端頁面源文件的隱藏字段<input type="hidden" name="__viewstate" value=""/>中,我們可以通過瀏覽器查看到它,value的值就是經過加密的頁面狀態信息。服務器根據value值進行窗體的再現,然后在窗體的事件處理階段進行執行響應的事件過程,然后把執行結果返回到客戶端,并且改變web窗體的狀態值,并回寫到value值中。最后到達資源清理階段。整個過程就是一個web窗體的生命周期,同時也完成了頁面狀態的管理。

  下面這個實例演示了asp.net頁面框架是如何維護頁面狀態的。所有代碼如下:

  <%@ page language="vb" %>
  <script runat="server">
     sub button1_click(sender as object, e as eventargs)
    '使viewstate(“value”)的值增1
    viewstate("value") += 1
          label1.text = "這是第" & str(viewstate("value")) & "點擊按鈕"
  end sub
  sub page_load(sender as object, e as eventargs)
  '判斷是否為第一次處理該頁面
  '如果是則使viewstate類保存鍵value的值為0
     if not page.ispostback then
              viewstate("value") = 0
              label1.text = "這是第" & str(viewstate("value")) & "點擊按鈕"
          end if
  end sub
  </script>
  <html>
  <head>
      <title>頁面狀態管理</title>
  </head>
  <body ms_positioning="gridlayout">
      <form id="form1" method="post" runat="server">
          <asp:label id="label1" runat="server" width="176px"></asp:label>
          <br />
          <asp:button id="button1" runat="server" text="點擊累加"></asp:button>
      </form>
  </body>
  </html>

  保存為viewstate.aspx,運行結果如圖4.9所示。

  


圖4.9 點擊3次按鈕之后

  在客戶端的瀏覽器中,我們查看源文件,可以查看到的隱藏字段的值為:
  <input type="hidden" name="__viewstate" value="ddwtotk1mje0nda4o3q8cdxsphzhbhvloz47bdxppdm+oz4+o2w8atwxp
js+o2w8ddw7bdxppde+oz47bdx0pha8cdxspfrlehq7pjtspoi/meayr+esrcaz54k5
5ye75oyj6zkuoz4+oz47oz47pj47pj47pmlc5ptevwjok9dsup0e5ruygumi" />
  而整個頁面的狀態信息就其中

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 嘉义市| 郴州市| 神池县| 邻水| 涿鹿县| 垣曲县| 资源县| 泽州县| 大冶市| 南丹县| 申扎县| 平江县| 常德市| 安徽省| 漳平市| 故城县| 延长县| 潍坊市| 祥云县| 晋州市| 远安县| 延川县| 体育| 武强县| 政和县| 舞钢市| 淮阳县| 瑞丽市| 绥宁县| 宜宾市| 尉犁县| 贡山| 馆陶县| 江安县| 济阳县| 湘西| 扎鲁特旗| 太原市| 于都县| 马山县| 比如县|