Class ASP.NET-如何引用不在app_代码中的类

Class ASP.NET-如何引用不在app_代码中的类,class,reference,app-code,Class,Reference,App Code,我创建了一个名为MyMasterPage的母版页 public partial class MyMasterPage : System.Web.UI.MasterPage { protected void Page_Load(object sender, EventArgs e) { } } 我还在app_代码中创建了一个名为Class1的类: public class Class1 { public Class1() { MyMaster

我创建了一个名为MyMasterPage的母版页

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

    }
}
我还在app_代码中创建了一个名为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?)
我需要添加什么代码才能使其正常工作

这些类位于文件夹中,如下所示:


尝试将您的母版页放在命名空间中

除非您也将其放在应用程序代码下,否则您将无法引用MyMasterPage。通常在这种情况下,您会创建一个从母版页继承的基础母版页。e、 g

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继承。覆盖继承页中的虚拟方法

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模型,我能想到的唯一可行的方法。

冯有一个很好的建议,使用一个基本页面。应用程序代码文件存储在不同的程序集中,然后是aspx页面。这发生在网站项目中

我不确定你是否有这个选择,但是如果你选择Web应用程序项目而不是网站项目,那么你就不会有这个问题


这里有一篇博客文章可能会有所启发:

相对于你的应用程序代码,你的母版页类到底在哪里?你在页面中的代码可以访问应用程序代码文件夹中的Class1吗?我已经添加了一个图表来显示类的位置在StartClass0830的答案中,是的,母版页识别Class1