asp.net頁面生命週期之回發的處理

回發機制是asp.net編程的核心。其過程爲,將窗體數據投遞到原頁面,使用視圖狀態恢復調用上下文(即,上一次投遞頁面後,在服務器端生成的控件狀態)。

在頁面被初始化,且被投遞值也已就位後,便可以引發服務器端的事件。這些事件主要分爲兩類。第一類事件標誌着特定控件在回發間狀態發生了改變。第二類事件是在服務器端對引發投遞的客戶端動作的響應。

控件狀態變化的檢測

整個asp.net系統隱含了這樣一個假設:在瀏覽器運行的某些html標誌與活躍在服務器端的某些asp.net控件,必須存在一一對應關係。<input type="text’>和TextBox控件間的對應就是一個典型的例子。爲從技術上嚴格執行,該聯繫通過相同的Id名稱表示。當用戶向輸入元素鍵入某些新文本,並將其投遞到服務器後,對應的TextBox控件會被調用,以處理被傳遞的值。

對於所有LoadPostData方法返回true的控件,這時會執行那個IPostBackDataHandler接口的另一個方法--RaisePostDataChangedEvent方法。該方法發出信號給控件,通知asp.net應用程序該控件的狀態已被更改。該方法的實現取決於具體控件。然而,大多數控件會做這樣一件事:引發服務器事件,爲頁面的設計者提供一個介入的機會,以便對特定情況做處理。例如,如果TextBox的Text屬性在回發期間被更改,該TextBox會向宿主頁面引發TextChanged事件。

服務器端回發事件的執行

任何有意觸發服務器端動作的客戶端動作會引起回發,例如,單擊一個客戶端按鈕會將當前顯示的窗體內容投遞到服務器,從而需要某個動作和新的、已刷新的頁面輸出。客戶端按鈕控件(一般爲超鏈接或提交按鈕)與實現IPostBackEventHandler接口的服務器控件相關聯。

頁面處理程序會分析被投遞的數據,確定引發回發的控件。如果該控件實現了IPostBackDataHandler接口,處理程序會調用該接口的RaisePostBackEvent方法。該方法的實現由每個控件本身來完成。具體方式對於不同控件會有不同(至少在理論上如此)。然而,實際上任何主動投遞(posting)控件都會引發服務器事件,以便頁面的設計者能夠編寫代碼,對回發做出響應。

頁面回發到服務器有兩種方式。一種是通過提交按鈕,二是通過腳本。html提交按鈕會由服務器控件BUtton生成。LinkBUtton控件,以及其他的一些可回發控件,會將一些腳本插入到客戶端頁面中,並將自身的某個html事件綁定到瀏覽器html對象模型中的窗體submit方法上。


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