AI OnAI Off
Hi!
One way of doing this without developing any custom properties is to nest your local blocks in another local block. It could look something like this:
public abstract class BlockCollection : BlockData
{
public abstract IEnumerable<BlockData> GetBlocks();
}
[ContentType(DisplayName = "My block collection", Description = "", GUID = "EEEB790D-3C10-4EAB-BAB7-ACBE14780DBC", AvailableInEditMode = false)]
public class MyBlockCollection : BlockCollection
{
public virtual MyFirstBlockType FirstBlock { get; set; }
public virtual MySecondBlockType SecondBlock { get; set; }
public override IEnumerable<BlockData> GetBlocks()
{
return new BlockData[] { FirstBlock, SecondBlock };
}
}
Then you can have a block view looking like this in ~/Views/Shared/Blocks/BlockCollection.cshtml:
@model BlockCollection
@foreach (var block in Model.GetBlocks())
{
@Html.PropertyFor(m => block)
}
You can actually use the same view for all your block collections inheriting from BlockCollection by registering a template model:
[ServiceConfiguration(typeof(IViewTemplateModelRegistrator))]
public class TemplateCoordinator : IViewTemplateModelRegistrator
{
public const string BlockFolder = "~/Views/Shared/Blocks/";
public void Register(TemplateModelCollection viewTemplateModelRegistrator)
{
// BlockCollection partial
viewTemplateModelRegistrator.Add(typeof(BlockCollection), new TemplateModel
{
Name = "BlockCollectionView",
Inherit = true,
AvailableWithoutTag = true,
Path = BlockPath("BlockCollection.cshtml")
});
}
private static string BlockPath(string fileName)
{
return string.Format("{0}{1}", BlockFolder, fileName);
}
}
Thank you, i will give this a go although for now have used the MultipleProperty
Im trying to mimic functionality similar to the ElencySolutions.MultipleProperty basically i would like to build up a collection of static blocks and was wondering best way to approach this.
I dont want to use a content area as these blocks are static and not available in Edit mode.