Не все типы контента имеют 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;
}
Это имеет несколько преимуществ. Во-первых, вам не нужно проверять правовую часть, сам метод позаботится об этом. Другим преимуществом является то, что вы можете переопределить то, что вы хотите отобразить в качестве заголовка. Предположим, у вас есть тип видеоролика, и вы хотите, чтобы название отображалось как «Some Movie Title (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
этого пункта, то будет возвращать форматированный название;
Да, мой собственный тип контента: SideBarLinks имеет прикрепленную часть «Название». Также не могли бы вы рассказать мне, где эта вещь METADATA? Я имею в виду свойство DisplayText, которое вы использовали, поэтому я могу проверить это в Orchard CMS, например, как все PARTS и PRoperties перечислены в скриншоте/верхнем изображении, представленном выше? –
Большое спасибо devqon. Все ваши упомянутые способы отлично работали. Особая благодарность за разъяснение ITitleAspect. это действительно информативно. –