5

から継承して、ページの基本クラスを作成しましたSystem.Web.UI.Page

public abstract class PageBase : System.Web.UI.Page
{
    ...
}

ASP.NET ビューでもベース ページを宣言できることに気付きました。

<%@ Page Language="C#" CodeFileBaseClass="PageBase.cs" CodeFile="page.aspx.cs"
    Inherits="page" %>

いずれかの方法の長所と短所を誰かが説明できますか? どちらか一方を使用するのはいつですか、それとも両方とも同じですか? 両方を同時に使用するとどうなりますか?

4

1 に答える 1

5

CodeFileBaseClassCodeFileInherits継承の代わりではなく、継承と連携します。

たとえば、存在 CodeFile="page.aspx.cs"せずに指定すると、次のようになります。page.aspx.cs

Parser Error Message: The file '/page.aspx.cs' does not exist.

存在すると仮定して、存在せずpage.aspx.csに指定すると、次のようになります。 CodeFileBaseClass="PageBase.cs"PageBase.cs

Parser Error Message: Could not load type 'PageBase.cs'.

一方、属性を指定PageBase せずに継承することもできます。CodeFileBaseClassただし、これにより、基本クラスからページ上のコントロールを参照するときに予期しない動作が発生する可能性があります。

Microsoft の @Page MSDN Documentationから引用するには:

CodeFileBaseClass
ページの基本クラスの型名と、関連するコード ビハインド クラスを指定します。この属性はオプションですが、使用する場合は CodeFile属性も存在する必要があります。Web ページで宣言されたコントロールを参照するために、基本クラスで共通フィールド (およびオプションで関連付けられたイベント) を定義する共有シナリオを実装する場合は、この属性を使用します。ASP.NET コード生成モデルのため、この属性を使用せずに基本クラスでフィールドを定義した場合、コンパイル時に、Web ページ (別の部分クラス スタブ内) で宣言されたコントロールに対して新しいメンバー定義が生成されます。希望のシナリオは機能しません。しかし、CodeFileBaseClassを使用すると属性を使用して基本クラスをページに関連付け、部分クラス (その名前はInherits属性に割り当てられ、そのソース ファイルはCodeFile属性によって参照される) を基本クラスから継承すると、基本クラスのフィールドはコード生成後にページ上のコントロールを参照できるようにします。

于 2012-06-07T23:25:20.390 に答える