OnInit 和 Page_Init 事件有什么不同
生活随笔
收集整理的這篇文章主要介紹了
OnInit 和 Page_Init 事件有什么不同
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
OnInit 和 Page_Init 事件有什么不同 OnInit是最先執行的,???
???????????????????? override??? protected??? void??? OnInit(EventArgs??? e)???
???????????????????? {???
?????????????????????????????? //???
?????????????????????????????? //??? CODEGEN:該調用是??? ASP.NET??? Web??? 窗體設計器所必需的。???
?????????????????????????????? //???
?????????????????????????????? InitializeComponent();???
?????????????????????????????? base.OnInit(e);???
???????????????????? }???
????
????
????
?????? 加載???
????
???????????????????? 加載對應Load事件和OnLoad方法,對于這個事件,相信大多數朋友都會比較熟悉,用VS.Net生成的頁面中的Page_Load方法就是響應Load事件的方法,對于每一次請求,Load事件都會觸發,Page_Load方法也就會執行,相信這也是大多數人了解ASP.Net的第一步。???
????
???????????????????? Page_Load方法響應了Load事件,這個事件是在System.Web.WebControl.Control類中定義的(這個類是Page和所有服務器控件的祖宗),并且在OnLoad方法中被觸發。???
????
??????
????
???????????????????? 很多人可能碰到過這樣的事情,寫了一個PageBase類,然后在Page_Load中來驗證用戶信息,結果發現不管驗證是否成功,子類頁面的Page_Load總是會先執行,這個時候很可能留下一些安全性的隱患,用戶可能在沒有得到驗證的情況下就執行了子類中的Page_Load方法。???
????
???????????????????? 出現這個問題的原因很簡單,因為Page_Load方法是在OnInit中被添加到Load事件中的,而子類的OnInit方法中是先添加了Load事件,然后再調用base.OnInit,這樣就造成了子類的Page_Load被先添加,那么先執行了。???
????
???????????????????? 要解決這個問題也很簡單,有兩種方法:???
????
?? 1)??????? 在PageBase中重載OnLoad方法,然后在OnLoad中驗證用戶,然后調用base.OnLoad,因為Load事件是在OnLoad中觸發,這樣我們就可以保證在觸發Load事件之前驗證用戶。???
????
?? 2)??????? 在子類的OnInit方法中先調用base.OnInit,這樣來保證父類先執行Page_Load???
????
????
????
?? /???
?? 關于Page.ProcessRequest(HttpApplication類也有,可我不知道它們有什么區別)的基本處理過程是:???
????
?? private??? void??? ProcessRequest()?????
?? {???
???????? //??? 確定請求是否是回發??? (postback)???
?? IsPostBack??? =??? DeterminePostBackMode();???
????
?? //??? 觸發??? ASPX??? 源代碼的??? Page_Init??? 事件???
?? PageInit();???
????
?? //??? 加載??? ViewState,處理已發送的值。???
?? if??? (IsPostBack)??? {???
???????? LoadPageViewState();???
?? ProcessPostData();???
?? }?????????
????
?? //??? 觸發??? ASPX??? 源代碼的??? Page_Load??? 事件???
?? PageLoad();???
posted on 2009-04-08 17:43 小手冰涼 閱讀(...) 評論(...) ?編輯 收藏
???????????????????? override??? protected??? void??? OnInit(EventArgs??? e)???
???????????????????? {???
?????????????????????????????? //???
?????????????????????????????? //??? CODEGEN:該調用是??? ASP.NET??? Web??? 窗體設計器所必需的。???
?????????????????????????????? //???
?????????????????????????????? InitializeComponent();???
?????????????????????????????? base.OnInit(e);???
???????????????????? }???
????
????
????
?????? 加載???
????
???????????????????? 加載對應Load事件和OnLoad方法,對于這個事件,相信大多數朋友都會比較熟悉,用VS.Net生成的頁面中的Page_Load方法就是響應Load事件的方法,對于每一次請求,Load事件都會觸發,Page_Load方法也就會執行,相信這也是大多數人了解ASP.Net的第一步。???
????
???????????????????? Page_Load方法響應了Load事件,這個事件是在System.Web.WebControl.Control類中定義的(這個類是Page和所有服務器控件的祖宗),并且在OnLoad方法中被觸發。???
????
??????
????
???????????????????? 很多人可能碰到過這樣的事情,寫了一個PageBase類,然后在Page_Load中來驗證用戶信息,結果發現不管驗證是否成功,子類頁面的Page_Load總是會先執行,這個時候很可能留下一些安全性的隱患,用戶可能在沒有得到驗證的情況下就執行了子類中的Page_Load方法。???
????
???????????????????? 出現這個問題的原因很簡單,因為Page_Load方法是在OnInit中被添加到Load事件中的,而子類的OnInit方法中是先添加了Load事件,然后再調用base.OnInit,這樣就造成了子類的Page_Load被先添加,那么先執行了。???
????
???????????????????? 要解決這個問題也很簡單,有兩種方法:???
????
?? 1)??????? 在PageBase中重載OnLoad方法,然后在OnLoad中驗證用戶,然后調用base.OnLoad,因為Load事件是在OnLoad中觸發,這樣我們就可以保證在觸發Load事件之前驗證用戶。???
????
?? 2)??????? 在子類的OnInit方法中先調用base.OnInit,這樣來保證父類先執行Page_Load???
????
????
????
?? /???
?? 關于Page.ProcessRequest(HttpApplication類也有,可我不知道它們有什么區別)的基本處理過程是:???
????
?? private??? void??? ProcessRequest()?????
?? {???
???????? //??? 確定請求是否是回發??? (postback)???
?? IsPostBack??? =??? DeterminePostBackMode();???
????
?? //??? 觸發??? ASPX??? 源代碼的??? Page_Init??? 事件???
?? PageInit();???
????
?? //??? 加載??? ViewState,處理已發送的值。???
?? if??? (IsPostBack)??? {???
???????? LoadPageViewState();???
?? ProcessPostData();???
?? }?????????
????
?? //??? 觸發??? ASPX??? 源代碼的??? Page_Load??? 事件???
?? PageLoad();???
posted on 2009-04-08 17:43 小手冰涼 閱讀(...) 評論(...) ?編輯 收藏
轉載于:https://www.cnblogs.com/gonghui/articles/1431837.html
總結
以上是生活随笔為你收集整理的OnInit 和 Page_Init 事件有什么不同的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET MVC Training
- 下一篇: 一首歌词