Disclaimer: This website requires Please enable JavaScript in your browser settings for the best experience.

HomeDev GuideRecipesAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunityOptimizely AcademySubmit a ticketLog In
Dev Guide
GitHubNuGetDev CommunityOptimizely AcademySubmit a ticket

Optimizely developer documentation

How can we help you?

Try our conversational search powered by Generative AI!

AI OnAI Off

Create a custom form block

Shows you how to create your own form container block.

📘

Note

Optimizely Forms is only supported by MVC-based websites and HTML5-compliant browsers.

Sometimes, you might want to customize the Form Container Block to improve the rendering process or add more features to the form. For example, you might want a property called HasTwoColumns to control whether the form should render a layout of two columns.

  1. Create class EPiFormWithTwoColumnOptionBlock.
    [ContentType(GUID = "{DD088FD8-895E-47EF-9497-5B7A6700F4A6}", GroupName = EPiServer.Forms.Constants.FormElementGroup_Container, Order = 4000)] [ServiceConfiguration(typeof (IFormContainerBlock))] public class EPiFormWithTwoColumnOptionBlock: FormContainerBlock { [Display(Name = "Use two column layout", Order = 1, GroupName = SystemTabNames.Content)] public virtual bool HasTwoColumns { get; set; } }
  2. Create class EPiFormWithTwoColumnOptionBlockController.
    [TemplateDescriptor(AvailableWithoutTag = true, Default = true, ModelType = typeof (EPiFormWithTwoColumnOptionBlock), TemplateTypeCategory = TemplateTypeCategories.MvcPartialController)] public class EPiFormWithTwoColumnOptionBlockController: FormContainerBlockController { protected override IViewComponentResult InvokeComponent(FormContainerBlock currentBlock) { return base.InvokeComponent(currentBlock); } }
  3. Copy FormContainerBlock.cshtml in folder \\modules_protected\\EPiServer.Forms\\EPiServer.Forms.zip\\Views\\ElementBlocks\\Components\\FormContainerBlock to a folder in the Alloy site \\Views\\Shared\\ElementBlocks\\Components\\EPiFormWithTwoColumnOptionBlock
    Then update some code like this:
    // change the class name of Model to new class EPiFormWithTwoColumnOptionBlock @model AlloyMvcTemplates.EPiFormWithTwoColumnOptionBlock
    Add code to the body of view.
    //... @{ async void RenderFormBody() { if (Model.HasTwoColumns) { <div class="Form__Status"> <span class="Form__Readonly__Message"> <h2>Has two colums</h2> </span> </div> } //....

Did this page help you?