- - PR -
ASP.NET2.0における継承
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-01-10 14:45
ASP.NET2.0(Visual Web Developer 2005 Express Edition)でWEBアプリケーションの開発をしています。
VB.net 2003での開発時は同じプロジェクト内にあれば、基本クラスを継承する際に単純にコードビハインドファイルのInheritsの後ろにクラス名を記述すると継承できていたのですが、2005では型の定義エラーとなります。PartialをPublicにしても結果は同じでしたが、別途コンパイル等をしないと継承元として使用できないのでしょうか? 基本的なことですが、よろしくお願いします。 全ての基本となるページ Partial Class BaseForm Inherits System.Web.UI.Page 継承するページ Partial Class Calender Inherits BaseForm | ||||
|
投稿日時: 2007-01-10 14:47
Partial で分割されたクラス側に、すでに別の型が Inherits されているのではないでしょうか。 # 誤爆した... orz # ちゃんと読めよ > わたし [ メッセージ編集済み 編集者: じゃんぬねっと 編集日時 2007-01-10 15:18 ] | ||||
|
投稿日時: 2007-01-10 15:02
1.1までと2.0ではこのあたりの仕組みが変わっています。
2.0ではaspxファイルから自動生成されるクラスの中でPageクラスを継承しているため、 その一部であるコードビハインド側のパーシャル部分に別の継承元を指定しても うまく動かなくなっています。 aspxファイルの@PageディレクティブのCodeFileBaseClass属性で継承元のクラスを 指定すればよいと思います。 | ||||
|
投稿日時: 2007-01-10 15:17
じゃんぬねっとさん、どっとねっとふぁんさん回答ありがとうございます。
どっとねっとふぁんさんの言われたとおり、@PageディレクティブのCodeFileBaseClass属性に継承元クラスを指定したのですが、 「型 'BaseForm' を読み込めませんでした。」となりうまく読み込めませんでした。 他に指定があるのでしょうか? <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Form1.aspx.vb" Inherits="Form" CodeFileBaseClass="BaseForm" %> | ||||
|
投稿日時: 2007-01-10 15:43
BaseFormのクラスは作成済みなんですよね?
BaseFormクラスのソースファイルはApp_Codeフォルダの下にありますか? | ||||
|
投稿日時: 2007-01-10 16:16
App_Codeフォルダの下には入れていませんが、BaseFormのクラスは作成済です。App_Codeフォルダの下へ持っていくとデザイナでrunat=serverになっているコントロールが認識できなかったので・・・。
Microsoftのページでそれらしい記述を見つけたので、Reference Pageなどを入れてみましたが、エラーが解消されません。 http://www.microsoft.com/japan/msdn/net/aspnet/conversionissuesasp_net.aspx | ||||
|
投稿日時: 2007-01-10 16:37
クラスなどのソースコードはApp_Codeフォルダの下に置かないと自動ではコンパイル
してくれません。 あらかじめコンパイルしたdllファイルはbinフォルダの下に配置する必要があります。 #ただ、こういったクラスをあらかじめコンパイルするのは面倒じゃないかな。 > App_Codeフォルダの下へ持っていくとデザイナでrunat=serverになっているコントロールが認識できなかったので・・・。 認識できない、というのはどういうことでしょうか? ソース(またはその書き方)に問題がある可能性があります。 | ||||
|
投稿日時: 2007-01-11 09:20
階層の指定ミスがあったようで、@Reference Pageの追加で解決しました。
いろいろとアドバイスありがとうございました。 <基本となるページ> ・デザイナ <%@ Page Language="VB" AutoEventWireup="false" CodeFile="BaseForm.aspx.vb" Inherits="BaseForm" %> ・コード Partial Public Class BaseForm Inherits System.Web.UI.Page <継承ページ> ・デザイナ <%@ Reference Page="BaseForm.aspx" %> <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Form1.aspx.vb" Inherits="Form1" CodeFileBaseClass="BaseForm" %> ・コード Partial Class Form1 Inherits BaseForm |
1