我有一个网站(不是网络应用),其中包含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;
}
}
}
我可以在A
中使用_Default
。例如。如果我在课程test1.
中输入_Default
时,IntelliSense将显示这两个类。
但是,如果我在课程test1.
中输入A
时,智能感知将仅显示A
。
为什么我不能在_Default
使用A
?
错误:名称空间中不存在类型或命名空间名称 (你错过了一个装配参考)
编辑:
我试着澄清一下。
在.cs
类_Default
所在的test1.
文件中工作时,我可以键入_Default
,这是命名空间,智能感知将显示类A
和类{{1} }。
但是,如果我在.cs
文件中工作,A
类位于test1.
并输入A
,这就是命名空间,那么intellisense只会向我显示类{{1}}
答案 0 :(得分:3)
过去我遇到了这个挑战。
在Visual Studio中打开App_Code文件夹节点。 右键单击相关的类,然后单击属性
在属性窗格中,将Build Action更改为Compile。
它现在应该可以正常工作。
答案 1 :(得分:2)
由于 ASP.NET网站没有名称空间,因此您在创建新文件后自行添加了误导性namespace
的问题。名称空间在 Web应用程序项目中可用。即,在创建新的WebSite之后,名称空间不会添加到文件中。
因此,您不需要将班级A
放在test1
命名空间内,因为即使没有命名空间,您也可以在A
中使用default.aspx.cs
,但您无法从Webform页面或App_Code
类访问其他WebForm页面类。
顺便说一句,如果您想在Default
Web表单的类中使用必要且可重用的方法,可以将这些方法移到A
下的App_Code
类中我已经说过你可以在所有Web Form CodeFiles
中使用它而不为它提供命名空间。
答案 2 :(得分:1)
简而言之,您无法从App_code
类访问页面类
此限制来自website project
编译模型。特殊App_code
文件夹包含可用于页面(以及彼此)的共享类(以及可能的其他资源)。在编译期间,App_code
首先在单个程序集中编译。这是关键点。页面,控件和MasterPages在另一个程序集中编译,这些程序集可能引用App_code
程序集(但反之亦然)。所以这是单向的道路
没有namespace
声明应该绕过这种行为
页面可以在ASP
命名空间(ASP.default_aspx
)中看到对方,但页面通常没有公共属性/方法(用户控件.ascx
通常有)。
在MSDN Code-Behind Pages