什么是可附加的真正在这里做?

时间:2012-03-29 14:19:12

标签: asp.net-mvc asp.net-mvc-3 module orchardcms

来自Sipke's tutorial的这段代码片段(顺便说一句,这很棒)让我有些困惑。在他的教程中,他说.Attachable允许将内容部分添加到内容类型。但是在代码段中,内容部分下面被声明为.Attachable(false),并且仍然被添加到内容类型中。所以必须有一些我没有意识到的其他标准。那么对于Attachable而言,CustomerPart和AddressPart之间真正的区别是什么呢?

        ContentDefinitionManager.AlterPartDefinition(typeof(Models.CustomerPart).Name, p => p
            .Attachable()
            );

        ContentDefinitionManager.AlterTypeDefinition("Customer", t => t
            .WithPart(typeof(Models.CustomerPart).Name)
            .WithPart("UserPart")
            );

        ContentDefinitionManager.AlterPartDefinition(typeof(Models.AddressPart).Name, p => p
            .Attachable(false)
            .WithField("Name", f => f.OfType(typeof(TextField).Name))
            .WithField("AddressLine1", f => f.OfType(typeof(TextField).Name))
            .WithField("AddressLine2", f => f.OfType(typeof(TextField).Name))
            .WithField("Zipcode", f => f.OfType(typeof(TextField).Name))
            .WithField("City", f => f.OfType(typeof(TextField).Name))
            .WithField("Country", f => f.OfType(typeof(TextField).Name))
            );

        ContentDefinitionManager.AlterTypeDefinition("Address", t => t
            .WithPart(typeof(Models.AddressPart).Name)
            );

1 个答案:

答案 0 :(得分:4)

IIRC内容部分始终可以附加到某个类型(例如,通过ActivatingFilter<>,或在迁移中指定),但只有标记为Attachable()的部分才会显示在您的正在管理仪表板中构建内容类型。因此,我认为在这种情况下,在通过信息中心构建时为内容类型选择内容部分时会显示CustomerPart,而AddressPart则不会出现。

编辑:我已经准备好了一些细节,我认为这是因为AddressPart仅附加到Address内容项。客户和地址之间存在一对多关系,并且允许用户将AddressPart附加到其他内容类型没有意义,因此AddressPart对用户隐藏,但仍可附加到迁移中的内容项。