3

MyMasterPageというMasterPageを作成しました。

public partial class MyMasterPage : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
}

app_codeにClass1というクラスも作成しました。

public class Class1
{
    public Class1()
    {
      MyMasterPage m;
    }
}

Class1でMyMasterPageを参照したいのですが、コンパイラの警告が表示されます。

The type or namespace name 'MyMasterPage' could not be found (are you missing a using directive or an assembly reference?)

これを機能させるには、どのコードを追加する必要がありますか?

クラスは次のようにフォルダにあります。

代替テキストhttp://www.yart.com.au/stackoverflow/masterclass.png

4

3 に答える 3

5

MyMasterPage も App_Code の下に配置しないと参照できません。通常、このような状況では、MasterPage から継承するベース マスター ページを作成します。例えば

public partial class MasterPageBase : System.Web.UI.MasterPage
{
   // Declare the methods you want to call in Class1 as virtual
   public virtual void DoSomething() { }

}

次に、実際のマスター ページで、System.Web.UI.MasterPage から継承する代わりに、MasterPageBase から継承します。継承ページの仮想メソッドを上書きします。

public partial class MyMasterPage : MasterPageBase

それを参照する必要がある Class1 では (Page クラスの MasterPage プロパティからマスター ページを取得すると仮定すると、コードは次のようになります...

public class Class1
{
    public Class1(Page Target)
    {
      MasterPageBase _m = (MasterPageBase)Target.MasterPage;
      // And I can call my overwritten methods
      _m.DoSomething();
    }
}

それは非常に長い道のりですが、これまでのところ、ASP.NET モデルを考えるとうまくいくと私が考えることができる唯一のものです。

于 2009-04-16T01:49:27.277 に答える
1

マスター ページを名前空間に配置してみてください

于 2009-04-16T01:31:18.317 に答える