PageBase类和OnInit方法[转帖]

的确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();  

转自: http://topic.csdn.net/t/20041004/09/3425847.html

原文地址:https://www.cnblogs.com/liangwei389/p/1169950.html