Orchardcms 为什么ContentPart不在ContentItem中?

Orchardcms 为什么ContentPart不在ContentItem中?,orchardcms,Orchardcms,为什么ContentItem中不包含无字段ContentPart 下面是Migrations.cs中的代码: SchemaBuilder.CreateTable("ImageDescribedPartRecord", table => table.ContentPartRecord()); ContentDefinitionManager.AlterPartDefinition( "ImageDescribedPart",

为什么ContentItem中不包含无字段ContentPart

下面是Migrations.cs中的代码:

SchemaBuilder.CreateTable("ImageDescribedPartRecord", 
                table => table.ContentPartRecord());

ContentDefinitionManager.AlterPartDefinition(
                "ImageDescribedPart",
                cpd => cpd.WithField(
                    "Image",
                    b => b
                             .OfType("MediaPickerField")
                             .WithSetting("MediaPickerFieldSettings.Required", "false")));

ContentDefinitionManager.AlterTypeDefinition(
                "PlantPicture",
                cfg => cfg
                           .WithPart("ImageDescribedPart")
                           .WithPart("CommonPart", p => p.WithSetting("OwnerEditorSettings.ShowOwnerEditor", "false"))
                           .WithPart("BodyPart")
                           .WithPart("TitlePart")
                           .WithPart("AutoroutePart"
                                     , builder =>
                                       builder
                                           .WithSetting("AutorouteSettings.AllowCustomPattern", "false")
                                           .WithSetting("AutorouteSettings.AutomaticAdjustmentOnEdit", "true")
                                           .WithSetting("AutorouteSettings.PatternDefinitions", "[{Name:'Container', Pattern: '{Content.Container.Path}/images/{Content.Slug}', Description: 'apgii/taxon/sub-taxon/images/title'}]")
                                           .WithSetting("AutorouteSettings.DefaultPatternIndex", "0"))
                           .WithPart("ContainablePart")
                           .Creatable(true)
                    // todo: The following doesn't work. Make it work.
                           .WithSetting("BodyPartSettings.FlavorDefault", "text") 
                           );
以下是ContentPart的代码:

public class ImageDescribedPart : ContentPart<ImageDescribedPartRecord>{

    }

 public class ImageDescribedPartRecord :ContentPartRecord {}
您将该项“强制转换”为零件,并将其存储为IEnumerable。我想知道这怎么不会导致编译错误,因为这是错误的


最可能的问题根源是,如果您计划通过“铸造”直接使用零件,则零件应具有相应的驱动程序(可以为空)。

确定。问题是处理程序中没有添加筛选器。已添加Activator筛选器:

public ImageDescribedHandler (IRepository<ImageDescribedPartRecord> repository,      INavigationManager navigationManager)
{
    Filters.Add(new ActivatingFilter<ImageDescribedPart>("PlantPicture"));
}
公共图像描述处理程序(IRepository存储库,INavigationManager导航管理器)
{
过滤器。添加(新激活过滤器(“PlantPicture”);
}

还删除了用于创建表格的行。

该行可有效转换为零件。请参阅ContentExtension.aspat方法(此IEnumerable items)。此外,零件不需要驱动程序来查询它。它需要一个正确的过滤器。请看下面我的答案。你说得对,我已经监督过这个项目的复数形式。我为这一混乱道歉。但是,我仍然正确地回答了您的问题:我已经谈到了“casting”(As()方法),是的,如果您按照前面介绍的方式连接迁移中的部件,您确实需要一个驱动程序。因此,即使你找到了另一个解决方案,我的答案也是正确的。我不明白你为什么否决它。@Piedone是对的-最初你只在迁移中描述了这一部分。在这种情况下,这个答案是完全正确的-有一个司机失踪了。你采取了不同的方法,好吧,但这并不是否决有效答案的理由。另外,请记住,当使用
ActivatingFilter
时,您将无法从管理UI中删除该部分。@Artjom part需要一个驱动程序。这是一个很好的做法。如果您的部件不执行任何操作(不保存任何数据,也不用于显示),您还可以将字段附加到名为与您的类型相同的部件,而无需进行筛选
ActivatingFilter
是一种简写方法,用于在任何时候都需要将某些零件附加到特定类型。它不是每个零件都需要的,也不应该每次都使用。谢谢你的评论和回答。是的,我没有想到要添加部件的驱动程序。关于投票。不是我干的。
2012-12-07 16:28:45,616 [35] TaxonomyNodePartDriver - Items count: 2
2012-12-07 16:28:45,617 [35] TaxonomyNodePartDriver - Item 0: Test
2012-12-07 16:28:45,619 [35] TaxonomyNodePartDriver - Item 1: test img 2
2012-12-07 16:28:45,619 [35] TaxonomyNodePartDriver - Images count: 0
public ImageDescribedHandler (IRepository<ImageDescribedPartRecord> repository,      INavigationManager navigationManager)
{
    Filters.Add(new ActivatingFilter<ImageDescribedPart>("PlantPicture"));
}