首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >焊接具有ContentField的ContentPart

焊接具有ContentField的ContentPart
EN

Stack Overflow用户
提问于 2014-05-23 20:33:12
回答 2查看 164关注 0票数 1

我试图焊接我的自定义ContentPart SitesPart,其中包含一个TaxonomyField类型的ContentField,但它对我不起作用。当我从UI附加这个部件时,它工作得很好,我在编辑模式和显示模式下都看到了TaxonomyField。

下面是我的ContentHandler的激活方法。

代码语言:javascript
复制
protected override void Activating(ActivatingContentContext context)
{
    if (context.ContentType == "Page")
    {
        context.Builder.Weld<SitesPart>();
    }
}

我试图深入研究Weld函数,发现它无法找到正确的typePartDefinition。它位于条件if (typePartDefinition == null)中,该条件创建一个没有现有ContentFields的空typePartDefinition,依此类推。

代码语言:javascript
复制
// obtain the type definition for the part
var typePartDefinition = _definition.Parts.FirstOrDefault(p => p.PartDefinition.Name == partName);
if (typePartDefinition == null) {
    // If the content item's type definition does not define the part; use an empty type definition.
    typePartDefinition = 
        new ContentTypePartDefinition(
               new ContentPartDefinition(partName),
               new SettingsDictionary());
}

我将非常感谢您的任何指导。

EN

回答 2

Stack Overflow用户

发布于 2015-07-19 07:52:38

哦,你完全正确,零件是焊接的,但如果有一些内容字段,它们就不是焊接的。ContentItemBuilder尝试通过我们要在其上添加部件的内容类型定义来检索部件定义。因此,因为这是不可能的,所以创建了一个新的内容部分,但是包含一个空的ContentPartFieldDefinition集合...

我认为ContentItemBuilder需要在其构造函数中注入,并使用ContentPartDefinition或更一般的IContentDefinitionManager……但是,为了快速解决问题,我尝试了以下有效的方法

在ContentItemBuilder.cs中,替换以下内容

代码语言:javascript
复制
public ContentItemBuilder Weld<TPart>()...

使用

代码语言:javascript
复制
public ContentItemBuilder Weld<TPart>(ContentPartDefinition contentPartDefinition = null)...

还有这个

代码语言:javascript
复制
new ContentPartDefinition(partName),

使用

代码语言:javascript
复制
contentPartDefinition ?? new ContentPartDefinition(partName),

在你的部分处理程序中,注入一个IContentDefinitionManager并使用这个

代码语言:javascript
复制
protected override void Activating(ActivatingContentContext context) {
    if (context.ContentType == "TypeTest") {
        var contentPartDefinition = _contentDefinitionManager.GetPartDefinition(typeof(FruitPart).Name);
        context.Builder.Weld<FruitPart>(contentPartDefinition);
    }
}

最好的

票数 1
EN

Stack Overflow用户

发布于 2015-04-25 10:46:28

要动态地将内容部分附加到内容类型,可以在处理程序中使用此命令

代码语言:javascript
复制
Filters.Add(new ActivatingFilter<YourContentPart>("YourContentType"));

在源代码中有很多示例

最好的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23829385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档