Orchardcms 无法阅读标题部分| Orchard CMS 1.7的标题|

Orchardcms 无法阅读标题部分| Orchard CMS 1.7的标题|,orchardcms,orchardcms-1.7,orchard-modules,Orchardcms,Orchardcms 1.7,Orchard Modules,这是参考资料,与我先前的问题有关 我正在尝试阅读零件标题部分的标题,如下代码所示: var query = Services.ContentManager.Query("SideBarLinks").List(); foreach (var sideBarLinks in query) { foreach(var part in sideBarLinks.Parts) { if (part is Or

这是参考资料,与我先前的问题有关

我正在尝试阅读零件
标题部分的
标题
,如下代码所示:

var query = Services.ContentManager.Query("SideBarLinks").List();
foreach (var sideBarLinks in query)
        {
            foreach(var part in sideBarLinks.Parts)
            {
                if (part is Orchard.Core.Title.Models.TitlePart)
                {
                    // Below Line throws error
                    //string title = part.Title;
                }
            }
        }
每个ContentPart在orchard中都有一个标题。因此,对于标题部分,我试图阅读标题。还有类似的属性可以访问吗,比如
part.Name

还检查了代码,并且有一个公共的
标题
属性,如下所示:


并非所有内容类型都附有标题栏。您可以在仪表板中对此进行检查,并查看您的内容类型是否确实附加了标题部分。例如,页面内容类型:

在代码中,如果内容项具有标题部分,则可以这样检查:

var query = Services.ContentManager.Query("SideBarLinks").List();
foreach (var sideBarLinks in query) {
    // Cast to TitlePart
    var titlePart = sideBarLinks.As<TitlePart>();
    var title = titlePart != null ? titlePart.Title : string.Empty;

    // Or:
    // var title = sideBarLinks.Has<TitlePart>() ? sideBarLinks.As<TitlePart>().Title : string.Empty;
}
这有多重好处。首先,您不必检查标题部分,方法本身会处理这个问题。 另一个优点是,您可以覆盖要显示为标题的内容。假设您有一个电影内容类型,并且希望标题显示为“某些电影标题(2001)”。然后,您只需在自定义部件中实现ITitleAspect:

public class MoviePart : ContentPart<MoviePartRecord>, ITitleAspect {

    // Shortcut to get the title
    public string MovieTitle {
        get { return this.As<TitlePart>().Title }
    }

    public int ReleaseYear {
        get { return Retrieve(x => x.ReleaseYear); }
        set { Store(x => x.ReleaseYear, value); }
    }

    // other properties

    // Implement Title from ITitleAspect
    public string Title {
        get { return string.Format("{0} ({1})", MovieTitle, ReleaseYear); }
    }
}
公共类电影部分:内容部分,ITitleAspect{
//获取标题的快捷方式
公共字符串电影{
获取{返回this.As().Title}
}
公共信息发布年{
获取{return Retrieve(x=>x.ReleaseYear);}
设置{Store(x=>x.ReleaseYear,value);}
}
//其他属性
//从ITitleAspect实现标题
公共字符串标题{
获取{return string.Format(“{0}({1})”,MovieTitle,ReleaseYear);}
}
}

此项目的
GetItemMetadata(theMovie).DisplayText
将返回格式化的标题

是的,我的自定义内容类型:侧边栏链接附带“标题”部分。你能告诉我元数据在哪里吗?我指的是你使用的DisplayText属性,所以我可以在Orchard CMS中检查这个,就像你在上面提供的截图/顶部图像中列出所有部件和属性一样吗?非常感谢devqon。你提到的所有方法都非常有效。特别感谢您的解释。这确实提供了信息。
public class MoviePart : ContentPart<MoviePartRecord>, ITitleAspect {

    // Shortcut to get the title
    public string MovieTitle {
        get { return this.As<TitlePart>().Title }
    }

    public int ReleaseYear {
        get { return Retrieve(x => x.ReleaseYear); }
        set { Store(x => x.ReleaseYear, value); }
    }

    // other properties

    // Implement Title from ITitleAspect
    public string Title {
        get { return string.Format("{0} ({1})", MovieTitle, ReleaseYear); }
    }
}