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属性をつけたんでしょうかねぇ。。。
あおい情報システム株式会社 小野修司(どっとねっとふぁん)