并非所有内容类型都附加了 TitlePart。您可以在仪表板中检查这一点,并查看您的内容类型是否确实附加了标题部分。例如,页面内容类型:
在代码中,如果内容项具有标题部分,您可以像这样检查:
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;
}
获取内容项的显示文本的最安全和推荐的方法是使用项元数据:
var query = Services.ContentManager.Query("SideBarLinks").List();
foreach (var sideBarLinks in query) {
// Get display text of the item
var title = Services.ContentManager.GetItemMetadata(sideBarLinks).DisplayText;
}
这具有多个优点。第一个是您不必检查标题部分,方法本身会解决这个问题。另一个优点是您可以覆盖要显示为标题的内容。假设您有一个电影内容类型,并且您希望标题显示为“某些电影标题 (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); }
}
}
然后GetItemMetadata(theMovie).DisplayText
该项的 将返回格式化的标题;