[英]Unable to access class in App_Code from code behind in ASP.Net Website Project
[英]Unable to access class from app_code
我有一个网站(不是网络应用程序),它有一个default.aspx
和default.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.