我是EPiServer的初学者。我们使用EPiServer版本9.12。 EPiServer.Core.ContentArea过去有一个目录列表,现已过时,请参阅:http://world.episerver.com/documentation/Class-library/?documentId=cms/7.5/284B326A
image http://jweschenfelder.de/download/Untitled.png
过去,“内容”列表具有以下优势:您可以读取块的名称,因为它读取了ContentArea的完整内容。检索名称会很棒,因为如果在那里创建新块,可以在CMS中对其进行配置。如果我使用现在建议的Items集合,我无法读取包含Link items集合的块的名称,那么我只能读取块内部的Link items集合。
我见过这个例子:
IContentLoader contentLoader = ServiceLocator.Current.GetInstance< IContentLoader >();
OnSiteLinkBlock itemBlock = contentLoader.Get(item.ContentLink, new LoaderOptions() { LanguageLoaderOption.MasterLanguage() });
我可以编辑OnSiteLinkBlock,但其他属性保持为空,并且不由EPiServer的ContentLoader填充(IContentLoader是EPiServer的接口)。
有关类层次结构的更多信息:
- [AvailableContentTypes(Availability = Availability.None)]
(在EPiServer.Core中)
public class BlockData : ContentData, IReadOnly< BlockData >, IReadOnly
- public abstract class BlockBase : BlockData
(BlockBase是一个自己的类)
- public class OnSiteLinkBlock : BlockBase
(OnSiteLinkBlock是一个自己的类)
有人知道解决方案吗?如何阅读ContentArea的更多属性?或者确实存在ContentArea的替代方案?非常感谢!
答案 0 :(得分:5)
通常,您使用Items
或FilteredItems
属性从ContentAreas中读取内容。他们返回了ContentAreaItem的可数。
使用IContentLoader
解析IContent实例,并将其与ContentLink
var loader = ServiceLocator.Current.GetInstance<IContentLoader>();
// contentarea is called UpperArea in the example
var icontentItems = currentPage.UpperArea
.FilteredItems
.Select(x => loader.Get<IContent>(x.ContentLink));
// example render in razor
foreach (var icontentItem in icontentItems)
{
<h2>@icontentItem.Name</h2>
}
答案 1 :(得分:1)
在回答有关ContentAreas替代方案的问题时,答案是肯定的。基本上有三种方法可以添加块/页面类型列表,每种方法都有其优缺点:
- LinkItemCollection
- IList<ContentReference>
- ContentArea
这是关于他们主要差异的一个很好的解读:https://gregwiechec.com/2015/09/comparing-list-properties/