-PR-
  • 困ってます
  • 質問No.7797360
解決
済み

ASP Pageの孫継承のPage_Load

  • 閲覧数1305
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 52% (12/23)

VisualStudio2010/.NET4.0で開発しています。

やりたい事
 ・以下のVBのC#版を作りたい。
  継承元のPage_Loadを実行させたい

Public Class Base
 Inherits System.Web.UI.Page

  Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
   Response.Write("親Page_Load")
  End Sub

End Class


Public Class _Default
 Inherits Base

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
   Response.Write("子Page_Load")
  End Sub
End Class

上記のaspは実行すると画面上に「親Page_Load子Page_Load」と表示される。
だが、以下のプログラムでは「子Page」としか表示されないので困っております。

public class Base : System.Web.UI.Page
{
 private void Page_Load(object sender, EventArgs e)
 {
  Response.Write("親Page");
 }
}

public partial class _Default : Base
{
 protected void Page_Load(object sender, EventArgs e)
 {
  Response.Write("子Page");
 }
}
よろしくお願いいたします。
  • 回答数2
  • 気になる数0

質問者が選んだベストアンサー

  • 回答No.1
レベル13

ベストアンサー率 59% (729/1235)

Page_LoadメソッドをPageクラスのLoadイベントに紐付ける必要がある。

VBは、Handles Me.Load で紐付けている。

_defaultクラスは、default.aspxファイルの AutoEventWireup="true" により自動的に紐付けられる。

> public class Base : System.Web.UI.Page

こちらは、紐付けていないのでコンストラクタで明示的に書く必要がある。

this.Load += Page_Load;

--
個人的には、親クラスでOnLoadメソッドのオーバーライドがお勧め。

public partial class Base : System.Web.UI.Page
{
protected override void OnLoad(EventArgs e)
{
//Loadイベント発生前の処理をここに書く
base.OnLoad(e);
//Loadイベント発生後の処理をここに書く
}
}
お礼コメント
arisutoteresu

お礼率 52% (12/23)

ご回答ありがとうございます。
順序が子のPage_Loadから親のPage_Loadの順番にはなりましたが、
上記の方法で私の中の問題は解決しました。
ありがとうございました。
投稿日時 - 2012-11-14 18:58:07
  • ありがとう数0
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.2
レベル11

ベストアンサー率 81% (127/155)

言語仕様の話かなぁ。 http://ufcpp.net/study/csharp/oo_inherit.html 上記ページの「基底クラスのメンバーの隠蔽」あたりがひっかかってる気がします。 VBはこのあたりの解釈が異なるのではないかと。 あと、ASP.NETの特にページの場合、その仕組みから継承をうまく利用するのはかなり難しいと思います。 複数のページで統一的な画面を作るのであれば、そのための仕組 ...続きを読む
言語仕様の話かなぁ。

http://ufcpp.net/study/csharp/oo_inherit.html

上記ページの「基底クラスのメンバーの隠蔽」あたりがひっかかってる気がします。
VBはこのあたりの解釈が異なるのではないかと。

あと、ASP.NETの特にページの場合、その仕組みから継承をうまく利用するのはかなり難しいと思います。
複数のページで統一的な画面を作るのであれば、そのための仕組みとして用意されている
マスターページやユーザーコントロールをうまく使えないか考えてみたほうがいいと思います。

また、このプログラムは動作を確認するためのサンプルとしてResponse.Writeを
利用しているのでしょうが、通常のコントロールとResponse.Writeを組み合わせると
きっと意図していないHTMLが生成されるので、注意が必要です。
お礼コメント
arisutoteresu

お礼率 52% (12/23)

ご回答ありがとうございます。
参考にいたします。
投稿日時 - 2012-11-14 18:56:43
  • ありがとう数0
  • 回答数2
  • 気になる数0
このQ&Aで解決しましたか?

関連するQ&A

-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


-PR-

ピックアップ

-PR-
ページ先頭へ