page_load 與page_init 的區別


默認新建一個頁面,就會有一個Page_Load事件的默認代碼,而Page_Init卻是另一個對頁面作用非常重要的事件。下面分別說明: Page_Init:是在頁面未加載之前,也就是在頁面初始化之前,在Page_Load之前調用的,可以在控件加載之前做一些客戶端檢測呀這些操作等。但這個事件對於當前用戶來說,只會進行一次,也就是第一次訪問這個頁面的時候,其運行一次。 Page_Load:在Page_Init之后運行(廢話),用於加載控制以及頁面的其它內容。客戶端每刷新或是提交一次,Page_Load事件就重新繪制頁面,將當前頁面當新頁面來處理。 區別說清楚了,再來說一下這點區別的利用。我想到的是,可以利用這一點來做頁面點擊或是訪問次數的更加精確一點的計數。比如說,在Page_Init里運行計數的代碼,這樣這個頁面被同一個用戶不停的刷或是操作的時候,其點擊始終是1次,這樣計數就比較科學一些。當然,不能防止去了別的頁面再回來的情況了。還有比如我以前網站的訪問統計,記錄IP訪問以及網站總的頁面訪問次數,都可以利用。一個ASP.NET頁面在運行時將經歷一個生命周期,在生命周期中將執行一系列處理步驟。這些步驟包括初始化、實例化控件、還原和維護狀態、運行事件處理程序代碼以及呈現頁面。在頁生命周期的每個階段中將引發一些事件,事件被引發時會運行程序員提供的事件處理代碼。頁面還支持自動事件連接,即ASP.NET將尋找具有特定名稱的方法,並在引發特定事件時自動運行這些方法。如果@Page指令的AutoEventWireup屬性設置為 true(若未定義該屬性則默認為 true),頁面事件將自動綁定至使用“Page_event”命名約定的方法,如 Page_Load 和 Page_Init。下表列出了主要的頁面生命周期事件。 頁 事 件 典 型 用 場 Page_PreInit 使用IsPostBack屬性確定是否是第一次處理該頁;創建動態控件;動態設置Theme屬性;讀取或設置配置文件屬性值等 Page_Init 讀取或初始化控件屬性 Page_Preload 事件在所有回發數據處理之后但在 Load 事件之前引發 Page_Load 讀取和更新控件屬性 Control events 處理特定事件,如 Button 控件的 Click 事件 Page_PreRender 對頁的內容進行最后更改 Page_Unload 執行最后的清理工作,例如關閉打開的文件和數據庫連接等 以下代碼可以用於驗證這些事件的觸發順序: 代碼清單 6 1 protected void Page_Load(object sender, EventArgs e){lbText.Text += "Page_Load


";} protected void Page_PreInit(object sender, EventArgs e){lbText.Text += "Page_PreInit


";} protected void Page_Init(object sender, EventArgs e){lbText.Text += "Page_Init


";} protected void Page_PreLoad(object sender, EventArgs e){lbText.Text += "Page_PreLoad


";} protected void Page_PreRender(object sender, EventArgs e){lbText.Text += "Page_PreRender


";} lbText是在頁面頂端放置的一個Lable控件。運行后在瀏覽器中呈現如圖6-1所示的效果。需要特別說明的是Page_Unload事件,它容易被誤解為關閉頁面時所觸發的事件。但是執行下面的代碼后就會發現其實不然。 代碼清單 6 2 protected void Page_Unload(object sender, EventArgs e){System.Web.HttpContext.Current.Response.Write(" ");} 保存並運行頁面后就會發現,在頁面加載后就看到了圖6-2的效果。 498)this.style.width=498;" border=0> 圖 6-1 498)this.style.width=498;" border=0> 圖 6-2 頁面在請求完成后,就立刻觸發了該事件。關閉頁面是一個客戶端的事件,請不要與之混淆。此外,如果在Page_Unload中調用Response.Write方法,還會得到一個“響應在此上下文中不可用。”的錯誤警告。 了解了頁面事件的觸發順序,在實際網站的開發中,我們就可以根據需要在不同的事件發生時給出處理操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM