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.