2009-04-16 45 views
3

我已经创建了一个名为MyMasterPage的母版页。ASP.NET - 你如何引用一个不在app_code中的类

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

    } 
} 

我也创建了一个名为Class 1类中的app_code:

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

在Class我想引用MyMasterPage但我得到一个编译器警告:

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

做些什么码我需要添加才能使这个工作?

类在文件夹如下:

alt text http://www.yart.com.au/stackoverflow/masterclass.png

+0

到底在哪你的母版类关系到你的App_Code文件? – 2009-04-16 01:32:17

+0

您的代码可以访问App_Code文件夹中的Class1吗? – TechTravelThink 2009-04-16 01:39:33

回答

1

尝试把你的母版页命名空间中的

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 

在Class,你需要参考它(我假设你从一个Page类母版属性的母版页,代码将看起来像......

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

这是一个非常漫长的方式,但迄今为止,我能想到的唯一一件事情就是ASP.NET模型的工作原理。

1

fung通过使用基本页面提供了一个很好的建议.App_Code文件存储在不同的程序集然后是aspx页面。这发生在Website Projects。

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

这里是一个博客贴子,可以提供一些线索:VS 2005 Web Project System: What is it and why did we do it? by Scott Guthrie

相关问题