【发布时间】:2019-10-07 00:03:19
【问题描述】:
关于项目结构的问题。到目前为止,我在 .NET Core 应用程序中有 3 个 ViewComponents。
在关于 View Components 的 Microsoft 页面中,他们使用命名空间 ViewComponentSample.ViewComponents,但实际上,引擎会在其中搜索 View Components
- /Pages/Components/ProductBox/Default.cshtml
- /Pages/Shared/Components/ProductBox/Default.cshtml
- /Views/Shared/Components/ProductBox/Default.cshtml
这意味着:在 Pages/Views/Models 旁边创建一个 ViewComponents 文件夹将不起作用,因为它找不到它们。
这意味着我将它们放在页面/共享中,对吗?虽然部分视图以“_”开头,但我应该把它留给 ViewComponents 吗?
目前我已将它放在 Pages\Shared\ProductBox 中,视图在 Pages\Shared\Components\ProductBox\Default 中。
然后还有 2 个问题。模型的命名空间和位置。
这个 ProductBox 应该在命名空间 MyWebsite.Pages.Shared 中,还是在命名空间 MyWebsite.ViewComponents 中?
至于模型,我应该把它放在 Models 文件夹中还是放在 View Component 旁边,因为它是直接相关的代码?我不喜欢将组件分散到 3 个文件夹中(ViewComponent、Components\ProductBox 和 Models)。有 ProductBox 确实感觉有点奇怪,但就像页面旁边有模型一样。
对于与视图组件关联的模型,到目前为止,我有 3 个组件使用它们的模型完全不同。
- LatestArticlesViewComponent:将 RssItem 类定义为子类,并返回它们的列表。
- CoachingFormViewComponent:模型派生自 PageModel 表单,而 ViewComponent 只是将页面的模型传递给视图。
- ProductBoxViewComponent:模型是一个POCO类,由具有显示属性的ViewComponent发起。
(起初我将 ViewComponent 类作为视图的模型传递,但这是代码异味,因此我将其更改为使用单独的模型类)
我做得对吗?我已经取得了进展,但想确保我走在正确的轨道上。
【问题讨论】:
标签: c# .net asp.net-mvc asp.net-core razor