首页 > 解决方案 > 添加内容类型的新实例时,如何显示内容部分的字段?

问题描述

我正在尝试创建一个自定义模块,其中包含一个包含内容部分(ProjectPart)的内容类型(Project)。项目将由管理员创建。目标是在特定页面上显示这些创建的项目。

当我尝试在管理菜单上实例化一个新项目时,我只看到一个字段(描述)。其他字段未显示。

我按照“Lombiq.TrainingDemo”项目中的步骤(从 PersonPart.cs 开始),并设法创建了一个自定义模块,其中包括一个内容类型(Project)、一个内容部分(ProjectPart)。项目中的评论声称我们可以创建一个包含所有字段的瞬间。但这不适用于我的情况。

这是我的代码:

https://gist.github.com/vogucore/efb0096e349591c235103e4f3f9e60d1

在这里你可以明白我的意思。

我希望看到和编辑它的所有字段,但只显示“描述”字段。

您能否告诉我是否遗漏了什么,或者项目中的解释不正确?

提前致谢。和平!(;

标签: c#asp.net-core-mvcorchardcms

解决方案


您似乎将内容部分的属性与内容部分的字段混淆了,这是 Orchard 中的两个不同概念。

部件是可以具有常规 C# 属性的常规 C# 对象。使用这些属性是开发人员在 Orchard 中扩展 CMS 和构建自定义部件的有效且主流的方式。

字段是较小的内容单元(通常是单个字符串、数字或图像等),可以动态添加到部件、槽代码或通过管理员的内容类型定义编辑器。它们的优点是站点管理员可以在运行时添加、删除和修改它们。

您会混淆它们是可以理解的:它们都是可以附加到零件的名称/值的东西。在实际使用方面,在两者之间进行选择的一个好方法是问以下问题:

这是一个与我正在构建的部件概念紧密相连的核心属性,还是对管理员有意义的附加属性?

例如,如果我构建一个商业产品部件,那么 SKU 和价格将是部件属性是有意义的。现在产品照片的不同之处在于并非所有产品都必须有照片,有些可能有几张,可能是视频,谁知道呢?使产品成为产品的不是内在属性。因此,将其设为一个字段(具体的媒体选择器字段)。

回到您的具体示例,您不应该在迁移中添加该字段:它基本上是在创建看起来像是您的Description属性的东西,但实际上是一个Description字段,除了您的同名属性。

您的零件属性没有出现在您的编辑器上的原因是您没有完成您的零件。您仍然需要为它构建一个驱动程序视图(该字段不需要,因为它们已经由构建该字段的人构建)。

作为旁注,我认为优秀的 Lombiq 人通过为该Biography属性指定TextField类型做出了糟糕的选择。在我看来,这非常令人困惑,并且应该是一个字符串,您的Description财产也应该如此。


推荐阅读