无法读取 TitlePart 的标题 |果园 CMS 1.7 |
Unable to read Title of TitlePart | Orchard CMS 1.7 |
这与我之前的问题有关 。
我正在尝试阅读 TitlePart
部分的 Title
,如下面的代码所示:
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 中都有一个标题。所以对于 TitlePart,我正在尝试阅读标题。还有没有类似的 属性 可以像 part.Name
一样访问?
也检查了代码,有一个 Public Title
属性 如下所示:
并非所有内容类型都附加了 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
将 return 格式化标题;
这与我之前的问题有关
我正在尝试阅读 TitlePart
部分的 Title
,如下面的代码所示:
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 中都有一个标题。所以对于 TitlePart,我正在尝试阅读标题。还有没有类似的 属性 可以像 part.Name
一样访问?
也检查了代码,有一个 Public Title
属性 如下所示:
并非所有内容类型都附加了 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
将 return 格式化标题;