どっとねっとふぁん

C# Tips And Samples
in 検索

07.Page_Loadは何故うごく?

最新の投稿は、投稿日時: 06-23-2005, 4:47 午後 投稿者: ono です。スレッドには 0 件の返答があります。
投稿のソート: 前へ 次へ
  •  06-23-2005, 4:47 午後 53

    07.Page_Loadは何故うごく?

    Page_Loadメソッドを呼び出す記述をしてないのに、ちゃんと動くのはなぜでしょう。
    ということでAutoEventWireup属性をfalseにしてみます(デフォルトはtrue)。
    -------------------------------------------------------
    <%@ Page language="c#" AutoEventWireup="false"%>
    <script runat="server">
    public void Page_Load(Object sender, EventArgs e) {
        Label1.Text = "Hello World!";
    }
    </script>
    <html>
    <body>
    <asp:Label id="Label1" runat="server" />
    </body>
    </html>
    
    -------------------------------------------------------
    このようにすると、Page_Loadメソッドは呼び出されません。

    ASP.NETでは、デフォルトの状態では以下のメソッドが記述されていると自動的に呼び出すようにイベントが登録されるようになっているようです。
      "Page_Init"
      "Page_Load"
      "Page_DataBind"
      "Page_PreRender"
      "Page_Unload"
      "Page_Error"
      "Page_AbortTransaction"
      "OnTransactionAbort"
      "Page_CommitTransaction"
      "OnTransactionCommit"

    自分でPageがLoadされたときのイベントを登録することもできます。
    VS.NETで作成したaspxだと、以下のサンプルのような意味の記述があって、Page_Loadメソッドが呼び出されるようになっています。
    ここではわざとPage_Loadという名前を利用せず、myPageLoadという名前にしてみました。
    -------------------------------------------------------
    <%@ Page language="c#" AutoEventWireup="false"%>
    <script runat="server">
    override protected void OnInit(EventArgs e){
        this.Load += new System.EventHandler(this.myPageLoad);
        base.OnInit(e);
    }
    
    public void myPageLoad(Object sender, EventArgs e) {
        Label1.Text = "Hello World!";
    }
    </script>
    <html>
    <body>
    <asp:Label id="Label1" runat="server" />
    </body>
    </html>
    
    -------------------------------------------------------
    Page_Loadメソッドの名前を変更してうれしいことって特にないと思うのでこんな記述はちょっとうっとおしいですね。
    むしろOnLoadメソッドをオーバーライドしてしまうほうがすっきりして見えます。
    -------------------------------------------------------
    <%@ Page language="c#" AutoEventWireup="false"%>
    <script runat="server">
    override protected void OnLoad(EventArgs e){
        Label1.Text = "Hello World!";
    }
    </script>
    <html>
    <body>
    <asp:Label id="Label1" runat="server" />
    </body>
    </html>
    
    -------------------------------------------------------
    この書き方を標準にしてもいいような気がしますが、overrideキーワードとかを使わなくてもいいように、AutoEventWireup属性をつけたんでしょうかねぇ。。。


    あおい情報システム株式会社
     小野修司(どっとねっとふぁん)
RSS ニュースフィードで参照
SkinName:iroha_CS2
Powered by Community Server, by Telligent Systems