我是 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
Contents 列表在过去具有优势,您可以读取 block 的名称,因为它读取了 ContentArea 的全部内容。检索名称会很棒,因为如果您在 CMS 中创建新 block ,则可以在 CMS 中配置它。如果我改用现在建议的 Items 集合,我将无法读取包含 Link items 集合的 block 的名称,然后我只能读取 block 内的 Link items 集合。
我看过这个例子:
IContentLoader contentLoader = ServiceLocator.Current.GetInstance< IContentLoader >();
OnSiteLinkBlock itemBlock = contentLoader.Get(item.ContentLink, new LoaderOptions() { LanguageLoaderOption.MasterLanguage() });
我可以编辑 OnSiteLinkBlock,但其他属性仍然为空,并且未由 EPiServer 的 ContentLoader 填充(IContentLoader 是 EPiServer 的接口(interface))。
有关类层次结构的更多信息:
- [AvailableContentTypes(Availability = Availability.None)]<br/> public class BlockData : ContentData, IReadOnly< BlockData >, IReadOnly
(在 EPiServer.Core 中)
- public abstract class BlockBase : BlockData
(BlockBase是一个自己的类)
- public class OnSiteLinkBlock : BlockBase
(OnSiteLinkBlock 是一个自己的类)
有人知道这里的解决方案吗?如何读取 ContentArea 的更多属性?或者是否存在 ContentArea 的替代方案?非常感谢!
最佳答案
通常您使用 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>
}
关于c# - EPiServer 9 : Is there any real alternative for EPiServer ContentArea Contents?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41491464/