繁体   English   中英

无法从app_code访问类

[英]Unable to access class from app_code

我有一个网站(不是网络应用程序),它有一个default.aspxdefault.aspx.cs 它有一个App_Code文件夹,里面有A类。 default.aspx.cs 好像:

namespace test1
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
    }
}

A级:

namespace test1
{
    public class A
    {
        _Default mDefaultRef;
        public pageLogicIndividual(_Default defaultRef)
        {
            mDefaultRef = defaultRef;
        }
    }
}

我可以在_Default使用A 例如。 如果我输入test1. ,在类_Default工作时,IntelliSense将显示这两个类。 但是如果我输入test1. ,在A类工作时,IntelliSense只会显示A 为什么我不能在A使用_Default

错误:命名空间中不存在类型或命名空间名称(您是否缺少程序集引用)

编辑:我会尽力澄清。 在类_Default所在的.cs文件中工作时,我可以键入test1. ,这是命名空间,而智能感知会告诉我类_Default和Class A 但是如果我在A类所在的.cs文件中工作并输入test1. ,这是命名空间,然后intellisense只会显示我的A类。

我过去曾经遇到过这个挑战。

在Visual Studio中打开App_Code文件夹节点。 右键单击相关的类,然后单击属性

在属性窗格中,将Build Action更改为Compile。

它现在应该工作正常。

您的问题在于您在创建新文件后自己添加的误导性namespace ,因为ASP.NET网站没有命名空间。 名称空间在Web应用程序项目中可用。 即在创建新的WebSite之后,名称空间不会添加到文件中。

因此,您不需要将类A放在test1命名空间内,因为即使没有命名空间也可以default.aspx.cs使用A ,但是您无法从Webform页面或App_Code类访问其他WebForm页面类

顺便说一句,如果你想在Default Web窗体的类中使用必要的和可重用的方法,你可以将这些方法移到App_Code下的A类,正如我所说的,你可以在所有Web Form CodeFiles使用它而不提供它的命名空间。

简而言之,您无法从App_code类访问页面类。
此限制来自website project编译模型。 特殊App_code文件夹包含可用于页面(以及彼此)的共享类(以及可能的其他资源)。 在编译期间, App_code首先在单个程序App_code编译。 这是关键点。 页面,控件和MasterPages在另一个程序集中编译,这些程序集可能引用了App_code程序集(但反之亦然)。 所以这是单行道。
没有namespace声明可以绕过此行为。
页面可以在ASP命名空间( ASP.default_aspx )中看到彼此,但页面通常没有公共属性/方法(用户控件.ascx通常有)。
在MSDN Code-Behind Pages上阅读更好的解释

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM