【问题标题】:What is the proper location for code classes (POCO, Models, etc.) in MVC?MVC 中代码类(POCO、模型等)的正确位置是什么?
【发布时间】:2020-12-15 20:40:56
【问题描述】:

我开始使用 MVC,我正在关注 this sample

在其中,我们发现Blog 类型包含在Controller 的类文件中,在Mvc3ViewDemo.Controllers 命名空间中。这在设计方法中有点禁忌,因为每个类都应该保存在自己的文件中。 (至少这是我的特殊约定。)

但是当我们将它移到它自己的文件中时——即使使用相同的命名空间——控制器也看不到它:

(在 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 是否会强制我将所有类放在与控制器相同的文件中?当我们需要一个可供两个或更多控制器使用的模型时,我们该怎么办?

--编辑--

此外,我无法将目标命名空间的Imports (using) 语句添加到 Controller 类文件:

【问题讨论】:

  • 你只需要在需要类的地方添加一个using语句,然后你就可以在任何你需要的地方拥有它
  • 对不起,我忘了提到这是我尝试的第一件事(我知道我忘记了一些东西)。我已经更新了我的问题。这是一个奇怪的问题。它应该“正常工作”。
  • 这是文件的构建操作。看我的回答。

标签: asp.net-mvc class asp.net-mvc-5 architecture visual-studio-2019


【解决方案1】:

问题在于Blog 类文件的构建操作设置为Content。显然这是在App_Code 下创建的新代码文件的默认操作,这就是我错过它的原因。它一直就在我的眼皮底下。

我将其设置为Compile,现在一切正常。

--编辑--

我已经提交了一份错误报告,可以查看here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-11
    • 2011-05-04
    相关资源
    最近更新 更多