ASP.NET MVC 3和App_Code文件夹

时间:2012-05-16 14:41:21

标签: asp.net-mvc-3 entity-framework-4

在ASP.NET Webform中,App_Code是放置代码并在运行时使用它的标准文件夹。但我认为这个文件夹在ASP.NET MVC中有点不同,我的问题是:

  • 我应该在ASP.NET MVC中放置我的代码(扩展方法,助手,...)。当我将代码存储在App_Code文件夹中时,我无法在controller中使用主题,但它们在views中工作正常。

  • 关于实体框架,同样的问题,我应该在哪里放置 edmx tt 文件。 我没有使用Code-First

更新

经过一些搜索,最后我在我的解决方案中创建了一个新的类库项目,所有controllersviews都提供了代码。 我仍然不知道为什么App_Code中的代码在控制器中不可用

6 个答案:

答案 0 :(得分:33)

我有同样的问题,我的MVC项目中没有识别我的类Utility.cs。我将构建操作“内容”更改为“编译”,这解决了我的问题。 希望有所帮助。

答案 1 :(得分:11)

App_Code在网站项目中是必需的,因为它具有特殊含义。这意味着“不要将这些文件提供给Web浏览器”。在ASP.NET MVC中,大多数情况下文件不直接提供给浏览器,因此不需要App_Code。您可以将所需的代码文件放在任何您想要的文件夹中,因为这些文件被编译成DLL而不会发布到网站本身。

使用独立库也是一个很好的解决方案。

答案 2 :(得分:2)

我建议从this tutorial开始。它首先使用EF代码,但如果您愿意,可以使用普通的edmx DbContext简单地替换代码ObjectContext(提示:Models文件夹)。

App_Code特定于网站项目。 IMO,它是组织除最简单网站之外的所有网站的可怕方式。 MVC项目是 Web应用程序项目,因此没有App_Code,您的类几乎可以在任何地方定义。

答案 3 :(得分:1)

没有人真正解释为什么App_Code首先存在。它是您放置代码文件以进行动态编译(在运行时)的地方。这是App_Code的首要原因及其特殊之处。您可以将代码放在您想要的任何文件夹中,但是您必须使用编译操作将其标记为在App_Code中编译而不是必需的,事实上,App_Code中的大多数文件甚至都不是项目的一部分。

它也适用于ASP.NET MVC项目,你只需要用.cshtml扩展名命名你的代码文件。

答案 4 :(得分:0)

好吧,尝试下载一些已经存在的开源项目。其中一个相当复杂,但如果你能理解它,那就非常酷 - orchard

最佳做法是将此逻辑移至DAL(数据访问层)或BLL(业务逻辑层)。取决于您的应用程序的复杂性。

答案 5 :(得分:-1)

对于那些不想要第二个项目/类库并只想要几个c#类的简单文件夹的人,我建议使用“App_Classes”。