Bjarne Fyrstenborg
03/01/2024, 7:59 AM@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage<Umbraco.Cms.Core.Models.Blocks.BlockGridItem<BlockReusableContent>>
@using ContentModels = Umbraco.Cms.Web.Common.PublishedModels;
@using Umbraco.Cms.Core
@using Umbraco.Cms.Core.Models.Blocks
@{
var content = Model.Content;
var data = content.Block as ReusableContent;
if (data == null || !data.Block.HasAny())
return;
}
@foreach (var block in data.Block)
{
if (block?.ContentUdi == null) { continue; }
var item = block.Content;
var contentUdi = Udi.Create(Constants.UdiEntityType.Element, item.ContentType.Key);
if (item is BlockImage image)
{
@await Html.PartialAsync("blockgrid/components/" + item.ContentType.Alias, new BlockGridItem<BlockImage>(contentUdi, image, null, null))
}
else if (item is BlockText text)
{
@await Html.PartialAsync("blockgrid/components/" + item.ContentType.Alias, new BlockGridItem<BlockText>(contentUdi, text, null, null))
}
else if (item is BlockAccordion accordion)
{
@await Html.PartialAsync("blockgrid/components/" + item.ContentType.Alias, new BlockGridItem<BlockAccordion>(contentUdi, accordion, null, null))
}
}
Matt Wise
03/01/2024, 9:27 AMLars-Erik
03/01/2024, 10:12 AMBjarne Fyrstenborg
03/01/2024, 10:24 AMBjarne Fyrstenborg
03/01/2024, 10:28 AMbielu
03/01/2024, 10:38 AMBjarne Fyrstenborg
03/01/2024, 2:13 PM@using Microsoft.AspNetCore.Mvc.ViewComponents;
@using Umbraco.Cms.Core
@using Umbraco.Cms.Core.Models.Blocks
@{
var content = Model.Content;
var data = content.Block as ReusableContent;
if (data == null || !data.Block.HasAny())
return;
}
@inject IViewComponentSelector _selector;
@foreach (var item in data.Block)
{
if (_selector.SelectComponent(item.Content.ContentType.Alias) is not null)
{
@await Component.InvokeAsync(item.Content.ContentType.Alias, item)
}
else
{
var partialViewName = "blockgrid/Components/" + item.Content.ContentType.Alias;
try
{
@await Html.PartialAsync(partialViewName, item)
}
catch (InvalidOperationException)
{
<p>
<strong>Could not render component of type: @(item.Content.ContentType.Alias)</strong>
<br />
This likely happened because the partial view <em>@partialViewName</em> could not be found.
</p>
}
}
}
The normal Accordion Block has as setting block, the global Accordion hasn't..
This caused an error in binding/mapping.
https://cdn.discordapp.com/attachments/1213032727117439006/1213126981558739065/image.png?ex=65f4578b&is=65e1e28b&hm=116fe5264c56eadae15896d479c9aa1695b7bc16e961863f433c0f00ceeadc33&Bjarne Fyrstenborg
03/01/2024, 2:15 PM@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage<Umbraco.Cms.Core.Models.Blocks.BlockGridItem<BlockAccordion, BlockSettingsAccordion>>
if I change this to:
@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage<Umbraco.Cms.Core.Models.Blocks.BlockGridItem<BlockAccordion>>
then it works... but the settings isn't available to use then 🤔Bjarne Fyrstenborg
03/01/2024, 3:24 PM@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage<Umbraco.Cms.Core.Models.Blocks.BlockGridItem<BlockAccordion, BlockSettingsAccordion>>
and in reusable block:
@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage<Umbraco.Cms.Core.Models.Blocks.BlockGridItem<BlockReusableContent>>
@using ContentModels = Umbraco.Cms.Web.Common.PublishedModels;
@using Microsoft.AspNetCore.Mvc.ViewComponents;
@using Umbraco.Cms.Core
@using Umbraco.Cms.Core.Models.Blocks
@{
var content = Model.Content;
var data = content.Block as ReusableContent;
if (data == null || !data.Block.HasAny())
return;
}
@inject IViewComponentSelector _selector;
@foreach (var item in data.Block)
{
if (_selector.SelectComponent(item.Content.ContentType.Alias) is not null)
{
@await Component.InvokeAsync(item.Content.ContentType.Alias, item)
}
else
{
var partialViewName = "blockgrid/Components/" + item.Content.ContentType.Alias;
try
{
if (item.Settings is null)
{
if (item.Content is BlockAccordion accordion)
{
var blockItem = new BlockGridItem<BlockAccordion, BlockSettingsAccordion>(item.ContentUdi, accordion, item.SettingsUdi, (BlockSettingsAccordion)item?.Settings!);
@await Html.PartialAsync(partialViewName, blockItem)
}
}
else
{
@await Html.PartialAsync(partialViewName, item)
}
}
catch (InvalidOperationException)
{
<p>
<strong>Could not render component of type: @(item.Content.ContentType.Alias)</strong>
<br />
This likely happened because the partial view <em>@partialViewName</em> could not be found.
</p>
}
}
}
Bjarne Fyrstenborg
03/01/2024, 3:34 PMif (item.Settings is null)
{
if (item.Content is BlockAccordion accordion)
{
var blockItem = new BlockGridItem<BlockAccordion, BlockSettingsAccordion>(item.ContentUdi, accordion, item.SettingsUdi, (BlockSettingsAccordion)item?.Settings!);
@await Html.PartialAsync(partialViewName, blockItem)
}
}
I often come back to this old issue:
https://github.com/umbraco/Umbraco-CMS/issues/10245A hub and casual space for you to interact with fellow community members and learn more about Umbraco!
Powered by