如何根据类型从 ContentArea 中获取块项目

Ayo*_*ina 1 c# episerver

我有一个以 ContentArea 作为其属性之一的页面类型

(currentPage.PrimaryComponentArea)

如何根据其类型获取存储在此属性中的块项目。

我还想访问块上的属性,所以我需要将它从 ContentAreaItem 转换为实际的块类型。

        public ActionResult Index(RatePlanPageType currentPage)
        {
          ..........

          var allItems = currentPage.PrimaryComponentArea.Items;

          var blocks = allItems.Where(x => bla bla bla  < Can I do it using linq

        }
Run Code Online (Sandbox Code Playgroud)

这是我的第一个 Episerver 项目,所以我希望这不是一个愚蠢的问题。

小智 5

var contentLoader = ServiceLocator.Current.GetInstance<IContentLoader>();
if (page != null && page.ContentArea != null && page.PrimaryComponentArea.Items.Any())
{
    foreach (var contentItem in page.PrimaryComponentArea.Items)
    {
        var item = contentLoader.Get<YOUR_CONTENT_TYPE>(contentItem.ContentLink);
        // do your stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

ContentArea 中的项保存为 ContentReference,所有 ContentReference 引用到一个 IContent。块和页面类型是 IContent。

如果要将内容区域限制为一种类型: [AllowedTypes(new [] {typeof(PageData), typeof(BlockData)})]

https://world.episerver.com/documentation/Items/Developers-Guide/Episerver-CMS/9/Content/Properties/Property-types/Restricting-content-types-in-properties/