ASP.NETのイベントモデル(学習に適した文章)

6919 ワード

デファルトでaspxのページの最初の行はページコマンドです.
ここで、CodeBehindプロパティはコード非表示ページの名前を指定し、Inheritsは所属するネーミングスペースとクラスを指定し、AutoEventWireupプロパティはtrueとfalseに割り当てることができ、デフォルトはtrueに割り当てることができます.私たちはまずDefaultにいます.aspxページに2つのLiteralコントロールを入れます.
 
  
       
       

       

デファルトでaspx.csページでは、デフォルトでPage_が存在します.Loadメソッドは、次のように定義されています.
 
  
        protected void Page_Load(object sender, EventArgs e)
        {
            this.LiLoad.Text = " Load ";
        }

ページが要求され、ページのロード時にこのメソッドが実行されます.
では、この方法はなぜページのロード時に実行されるのか、この方法はページに対応するイベントに登録されていません.ページのイベントもたくさんあります.重要なページのイベントをリストしてみましょう.ページクラスには次のイベントがあります.ページのベースクラスです.
 
  
public event EventHandler InitComplete;
        public event EventHandler LoadComplete;
        public event EventHandler PreInit;
        public event EventHandler PreLoad;
        public event EventHandler PreRenderComplete;
        public event EventHandler SaveStateComplete;

Controlクラスには次のイベントがあります.ControlクラスはPageクラスのベースクラスです.
 
  
public event EventHandler DataBinding;
public event EventHandler Disposed;
public event EventHandler Init;
public event EventHandler Load;
public event EventHandler PreRender;

ここで注目しているイベントを抽出し、イベントの実行順序に基づいてソートします.
PreInit:ページの初期化フェーズの開始時に開始
Init:ページの初期化時に開始
InitComplete:ページの初期化終了時に開始
PreLoad:ページのロードフェーズの開始時に開始
Load:ページのロード時に開始
LoadComplete:ページのロード終了時に開始
Prender:ページが表示されるときに開始
InitとLoadの2つのイベントを主に研究するページイベントがたくさん見られます.デファルトでaspx.csページで、Page_を追加Initメソッドは、次のように定義されています.
 
  
        protected void Page_Init(object sender, EventArgs e)
        {
            this.LiInit.Text = " Init ";
        }

では、上記の質問に戻ります.なぜページリクエストの後にPageを実行するのか.Init、Page_ロード方法?理由は次のとおりです.
ASP.NETのAutoEventWireup=「true」は、特定のイベントメソッドにページをバインドし、登録イベントを必要とせずに特定の名前のメソッドを自動的に識別します.
これらの特定の名前には、Page_Init, Page_Loadなど.ここで説明します:InitイベントはPage_と自動的にInitメソッドバインド、Loadイベント自動とPage_Loadメソッドバインド.もちろんこれらはAutoEventWireup=「true」のおかげで、AutoEventWireup=「false」のときにページを再度リクエストしたとき、Page_Init、Page_Loadメソッドは実行されません.では、登録イベントを表示できます.
 
  
        protected override void OnInit(EventArgs e)
        {
            this.Init += new EventHandler(this.Page_Init);
            base.OnInit(e);
        }
        protected override void OnLoad(EventArgs e)
        {
            this.Load += new EventHandler(this.Page_Load);
            base.OnLoad(e);
        }

では、OnInitとOnLoadは何なのでしょうか.
これらはControlクラスで定義された虚メソッドであるため,そのサブクラスで書き換えることができる.
ASPを見てください.NETのコメントは、
OnInit:システムを起動します.Web.UI.Control.Initのイベント.
OnLoad:Systemを起動します.Web.UI.Control.Loadのイベント.
いいですね.私たちはここでそれらを書き直して、登録事件は合理的です.Init登録イベント文をOnLoadメソッドに配置し、Load登録イベント文をOnInitメソッドに配置し、2つの処理の内容を交換して結果を見てみましょう.
 
  
        protected override void OnInit(EventArgs e)
        {
            this.Load += new EventHandler(this.Page_Load);
            base.OnInit(e);
        }
        protected override void OnLoad(EventArgs e)
        {
            this.Init += new EventHandler(this.Page_Init);
            base.OnLoad(e);
        }

私たちはページ発見を要求した:OnInitメソッドではLoad登録イベントが実行され、OnLoadメソッドではInit登録イベントが実行されていない.なぜなら、OnInitメソッドを実行すると、Initイベントの応答が完了したことを示し、その後、Initイベントにメソッドを登録しても呼び出されないからです.一方,OnInitメソッドではLoad登録イベントの場合,Loadイベントはトリガーされず,この場合はLoad登録イベントに有効である.だから今私达の多くの时、すべて1种の规范を形成して、OnInitの方法を书くだけで、OnLoadの方法を书かないで、私达の需要を完成することができます.だから一部のフレームの中でOnLoadの方法が見えないのはこのように形成されています.私たちはDefaultをaspx.csページは次のように調整されます.
 
  
        protected override void OnInit(EventArgs e)
        {
            this.Init += new EventHandler(this.Page_Init);
            this.Load += new EventHandler(this.Page_Load);
            base.OnInit(e);
        }

明らかにPageは必要ないと思いますInitとPage_Loadメソッドは、次のように再調整されます.
 
  
        protected override void OnInit(EventArgs e)
        {
            this.LiInit.Text = " Init ";
            this.LiLoad.Text = " Load ";
            base.OnInit(e);
        }

デバッグのソースを添付します.aspx:
 
  




    <br/> <br/> <br/>    <literal id="LiInit" runat="server"/> <br/>    <br/> <br/>    <literal id="LiLoad" runat="server"/> <br/> <br/> <br/> </code></pre> <br/>Default.aspx.cs: <br/> <pre><code> <br/>using System; <br/>using System.Collections.Generic; <br/>using System.Linq; <br/>using System.Web; <br/>using System.Web.UI; <br/>using System.Web.UI.WebControls; <p>namespace AspxEventsModel<br/>{<br/>    public partial class _Default : System.Web.UI.Page<br/>    {<br/>        protected override void OnInit(EventArgs e)<br/>        {<br/>            this.LiInit.Text = " Init ";<br/>            this.LiLoad.Text = " Load ";<br/>            //this.Init += new EventHandler(this.Page_Init);<br/>            //this.Load += new EventHandler(this.Page_Load);<br/>            base.OnInit(e);<br/>        }<br/>        //protected override void OnLoad(EventArgs e)<br/>        //{<br/>        //    this.Load += new EventHandler(this.Page_Load);<br/>        //    //this.Init += new EventHandler(this.Page_Init);<br/>        //    base.OnLoad(e);<br/>        //}<br/>        //protected void Page_Init(object sender, EventArgs e)<br/>        //{<br/>        //    this.LiInit.Text = " Init ";<br/>        //}<br/>        //protected void Page_Load(object sender, EventArgs e)<br/>        //{<br/>        //    this.LiLoad.Text = " Load ";<br/>        //}<br/>    }<br/>}<br/></p> </code></pre> <br/> , 。 <div class="clearfix"> <span id="art_bot" class="jbTestPos"/> </div> </div> </div> </div>