MVC 中代码 类(POCO、模型等)的正确位置是什么?
What is the proper location for code classes (POCO, Models, etc.) in MVC?
我正在开始使用 MVC,并且正在关注 this sample。
在其中,我们发现 Blog
类型包含在 Controller
的 class 文件中,在 Mvc3ViewDemo.Controllers
命名空间中。这在设计方法上有点禁忌,因为每个 class 都应该保存在自己的文件中。 (至少这是我的特殊约定。)
但是当我们将它移出到它自己的文件中时——即使使用相同的命名空间——控制器再也看不到它了:
(在 VB.NET 中,顶级命名空间 Mvc3ViewDemo
在项目级别指定。)
我尝试将文件放在 App_Code
和项目根目录中:
Namespace Controllers
Public Class Blog
Public Property Name As String
Public Property Url As String
End Class
End Namespace
视图可以看到:
@ModelType IEnumerable(Of Controllers.Blog)
@Code
ViewData("Title") = "Blog"
End Code
<h2>BLOG</h2>
<ul>
@For Each oBlog In Model
@<li><a href="@oBlog.Url">@oBlog.Name</a></li>
Next
</ul>
...但控制器不能。
如果放在Models
文件夹下,Controller和View都看不到。
恐怖中的恐怖! MVC 是否会强制我将所有 classes 放在与我的控制器相同的文件中?当我们需要一个由两个或更多控制器使用的模型时,我们该怎么办?
--编辑--
此外,我无法将目标命名空间的 Imports
(using
) 语句添加到控制器 class 文件:
问题是 Blog
class 文件的构建操作设置为 Content
。显然,这是在 App_Code
下创建的新代码文件的默认操作,这就是我错过它的原因。一直都在我眼皮底下。
我将其设置为 Compile
,现在一切正常。
--编辑--
我已提交错误报告,可能会被审核 here。
我正在开始使用 MVC,并且正在关注 this sample。
在其中,我们发现 Blog
类型包含在 Controller
的 class 文件中,在 Mvc3ViewDemo.Controllers
命名空间中。这在设计方法上有点禁忌,因为每个 class 都应该保存在自己的文件中。 (至少这是我的特殊约定。)
但是当我们将它移出到它自己的文件中时——即使使用相同的命名空间——控制器再也看不到它了:
(在 VB.NET 中,顶级命名空间 Mvc3ViewDemo
在项目级别指定。)
我尝试将文件放在 App_Code
和项目根目录中:
Namespace Controllers
Public Class Blog
Public Property Name As String
Public Property Url As String
End Class
End Namespace
视图可以看到:
@ModelType IEnumerable(Of Controllers.Blog)
@Code
ViewData("Title") = "Blog"
End Code
<h2>BLOG</h2>
<ul>
@For Each oBlog In Model
@<li><a href="@oBlog.Url">@oBlog.Name</a></li>
Next
</ul>
...但控制器不能。
如果放在Models
文件夹下,Controller和View都看不到。
恐怖中的恐怖! MVC 是否会强制我将所有 classes 放在与我的控制器相同的文件中?当我们需要一个由两个或更多控制器使用的模型时,我们该怎么办?
--编辑--
此外,我无法将目标命名空间的 Imports
(using
) 语句添加到控制器 class 文件:
问题是 Blog
class 文件的构建操作设置为 Content
。显然,这是在 App_Code
下创建的新代码文件的默认操作,这就是我错过它的原因。一直都在我眼皮底下。
我将其设置为 Compile
,现在一切正常。
--编辑--
我已提交错误报告,可能会被审核 here。