我是一名长期半专业的asp.net程序员,最近从asp.net表单环境跃升为MVC。所以我正在重新开发我的一个Web应用程序,它存在于MVC的表单中,我真的很喜欢MVC环境,很高兴我实现了飞跃。
但是......遇到了一些问题,比如这个有命名空间的问题。
让我们想象以下内容: 1)我创建了一个名为MyMvcProject的新MVC 4项目 2)我立即创建App_Code文件夹并添加一个新的class1.vb文件,如下所示:
Namespace MyNamespace
Public Class Class1
Property MyProperty As String
End Class
End Namespace
好到目前为止一切顺利。现在我想在控制器中访问这个类,如下所示:
Imports MyNamespace
Public Class Default1Controller
Inherits System.Web.Mvc.Controller
Function Index() As ActionResult
Dim obj As New Class1
Return View()
End Function
End Class
在asp.net表单环境中,我会很高兴。但是,在我的MVC项目中,我无法导入“MyNamespace”,因此无法创建Class1。所以我去寻找它并在对象浏览器中找到以下内容:
>[OTHER REFERENCES...]
v[VB] MyMvcProject
>{}MyMvcProject
>{}MyMvcProject.My
>{}MyMvcProject.My.Resources
v[VB] MyMvcProject
v{}MyNamespace
> [] Class1
>[OTHER REFERENCES...]
所以我的“MyNamespace”和“Class1”。所以我尝试按如下方式修改代码:
Imports MyMvcProject.MyNamespace
Public Class Default1Controller
Inherits System.Web.Mvc.Controller
Function Index() As ActionResult
Dim obj As New Class1
Return View()
End Function
End Class
但这没有用。我只能引用FIRST实例MyMvcProject及其子引用。不是我的“Class1”所在的第二个。我不确定如何解决这个问题。
更新1:我找到了解决方案(但没有解释) 无论出于何种原因,ASP.NET MVC不喜欢我把东西放在App_Code文件夹中。但是,如果我将class1.vb放在MODELS文件夹中,那么我可以导入“MyMvcProject.MyNamespace”并正常进行。 browswer现在看起来像这样:
>[OTHER REFERENCES...]
v[VB] MyMvcProject
>{}MyMvcProject
>{}MyMvcProject.My
>{}MyMvcProject.My.Resources
v{}MyMvcProject.MyNamespace
> [] Class1
v[VB] MyMvcProject
>[OTHER REFERENCES...]
注意MyMvcProject STILL的第二个引用存在。但是“MyNamespace”和我输入的类都在FIRST实例下,我可以正常引用和导入。在我看来,有点古怪。但是,如果我必须将所有内容都放在MODELS文件夹中,那么,我会这样做。
更新2 如果我知道问题是把东西放在App_Code文件夹中,我可以找到一些答案: ASP.NET MVC using App_Code directory
更新3
默认情况下,所有MVC项目都是Web应用程序项目(WAP),而不是Web站点项目。这意味着不需要App_Code文件夹,因为WAP总是会被编译。这意味着项目中的所有* .cs文件都将被编译,而Web Site项目中只会编译App_Code文件夹中的* .cs文件。
来源:http://forums.asp.net/t/1315143.aspx?MVC+and+App_Code+folder
更新4 以下是如何在MVC项目中包含App_Code文件夹:
你必须进入文件的Properties部分,然后进行Build Action从Content更改为Compile。就是这样;)
来源:http://how-to-code-net.blogspot.mx/2014/04/appcode-classes-not-available-in-aspnet.html