- PR -

Webフォームの継承について

1
投稿者投稿内容
kagura
常連さん
会議室デビュー日: 2003/03/26
投稿数: 27
投稿日時: 2003-11-20 19:28
ASP.NETで開発をしています。

通常System.Web.UI.Pageを継承してWebページが作成されますが、
他のWebフォームを継承してページが作れないかなと思い
----
'継承元Webフォーム
Public Class BasePage
Inherits System.Web.UI.Page
----
'継承先Webフォーム
Public Class InheritsPage
Inherits BasePage
----
としてみましたが、デザイナ上でWebフォームのアイテムが置けなくなり、どうやらHTMLページとして動いているみたいになりました。

Webフォームは必ずsuperクラスがSystem.Web.UI.Pageで無ければならないのでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-11-21 11:05
.aspxファイルの先頭辺りを見てもらうとわかりますが、.aspxファイルも、.aspx.vbファイルの先頭に定義されたクラスを継承しているんですねぇ。。。その辺をきちんと定義してあげると、いいと思いますよ。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2003-11-22 02:45
kaguraさん、こんばんは。

引用:

Webフォームは必ずsuperクラスがSystem.Web.UI.Pageで無ければならないのでしょうか?


出来ないことはありませんが、いろいろ大変なので、他フォームの継承はやめておいた方が良いと思います。

何と言っても、Webフォームデザイナが継承元で宣言されているコントロールを認識できない点が一番のネックです。

画面構成とかロジックとかを再利用したいのなら、フォームの継承ではなく、ユーザーコントロール(カスタムコントロールではありません)の使用をおすすめします。


[ メッセージ編集済み 編集者: きくちゃん 編集日時 2003-11-22 07:18 ]
kagura
常連さん
会議室デビュー日: 2003/03/26
投稿数: 27
投稿日時: 2003-11-25 10:53
返信送れて申し訳ありません。

>Jittaさん
継承元Webフォーム.aspx
@Pageディレクティブにて<@Page Inherits="BasePage">
継承先Webフォーム.aspx
@Pageディレクティブにて<@Page Inherits="InheritsPage">
としていますので、問題ないと思ったのですが・・・

>きくちゃんさん
継承元では、コントロールを置かずに独自メソッド(ViewSate関係)を追加して
その機能を継承にて引き継ごうと思っているのでデザイナ上のコントロールを参照できないのは
とりあえず問題ではなかったりします。
ユーザコントロールでViewSate関連は作ってあるのですが、継承が使用できればそっちのほうがスマートかなと思った次第です。

NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2003-11-25 12:43
スマートではないかもしれませんが、ロジックのみの継承でいいのであれば、
僕の場合、
***.aspx.vb以外に
基本クラスとして
PageBoundalyAbstract.vb
を作成し、
各ページ毎にPageBoundalyAbstract継承した***Boundaly.vb
を作成し、
***.aspx.vbに持たせることで、
ロジックの共有を行っています。
また、
プロジェクトメンバー単位でのコーディングのばらつき防止、
コーディングの道筋の明示、
といった副作用も期待して、
****.aspx.vbにはイベントをバウンダリクラスに渡す以外の
ロジックを書かなくてもいいようにしています。

#本当はVS.NETでWebフォームの継承をしても問題なく利用できれば一番良かったんですけれど・・・。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-11-25 13:45
引用:

kaguraさんの書き込み (2003-11-25 10:53) より:

継承元Webフォーム.aspx
@Pageディレクティブにて<@Page Inherits="BasePage">
継承先Webフォーム.aspx
@Pageディレクティブにて<@Page Inherits="InheritsPage">
としていますので、問題ないと思ったのですが・・・


 naruhiroさんのレスを見て…「ロジックの継承」しかできないですね!!コントロールはビハインドコードとaspxの両方に置かれるので、aspxの方でaspxを継承できないと、「見た目」は継承できないですね。
 PreRenderイベントハンドラで、コントロールのスタイルをいちいち指定してやれば「見た目」も継承できそうな気がしますが、、、いまいち。


 ちなみに私は、ascxにして、ページ上にドラッグしています。。。継承というより、使い回し、ですけど。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2003-11-25 13:55
>Jittaさん

僕もUIとロジックを合わせての再利用に関してはascxを作って、ドラッグ&ドロップで使いまわししてます。
他のページで必要になった時も貼るだけで済むのですごく楽だなーと実感してます。
kagura
常連さん
会議室デビュー日: 2003/03/26
投稿数: 27
投稿日時: 2003-11-26 10:07
原因が判明しました。
例ではBasePageとなっている継承元でnewをオーバーライドしているのですが、
そこでContextを利用していてそこでNull参照していました。
なので、コンストラクタに
If Context Is Nothing Then
    Exit Sub
End If
If Context.Items Is Nothing Then
    Exit Sub
End If
のコードを追加し、ビルド後デザイナ画面を開くと無事Webフォームとして動作しました。
ビルド後でないと駄目っぽいです。
#失念してしましたが、どこかのWebでもそのような図解で継承が説明去れていたような
1

スキルアップ/キャリアアップ(JOB@IT)