Extending #Episerver.forms with URL QueryString/post Value Element
How to extend Episerver Forms with a hidden QueryString/HttpPost Value Element.
Published 22nd of May 2017
For Episerver Version 10 and Forms > 4.4
Security warning! Be aware of how you use url parameters. This may be a security risk. Use at own risk or not at all.
Had a case where I needed to save a PageId into a form, similar to an order functionality.
You need an Element model:
[ContentType(GUID = "95A98808-4BFC-43FE-B723-4FD2F7E0FF1A", DisplayName = "Hidden Querystring/httpPost Value", GroupName = "BasicElements", Order = 2700)] public class QuerystringHiddenElementBlock : PredefinedHiddenElementBlock { /// <inheritdoc /> public override string GetDefaultValue() { return SanitizeUrl(HttpContext.Current.Request[this.PredefinedValue]); } public static string SanitizeUrl(string url) { return Regex.Replace(url, @"[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]", ""); } }
And the view (which is a copy of built in PredefinedHiddenElementBlock.ascx)
<%@ Import Namespace="System.Web.Mvc" %> <%@ Import Namespace="EPiServer.Forms.Core" %> <%@ Import Namespace="EPiServer.Forms.EditView" %> <%@ Import Namespace="EPiServer.Forms.Implementation.Elements" %> <%@ Control Language="C#" Inherits="ViewUserControl<PredefinedHiddenElementBlock>" %> <% var isViewModeInvisibleElement = Model is IViewModeInvisibleElement; var extraCSSClass = isViewModeInvisibleElement ? ConstantsFormsUI.CSS_InvisibleElement : string.Empty; var formElement = Model.FormElement; if (EPiServer.Editor.PageEditing.PageIsInEditMode) { %> <span class="Form__Element FormHidden <%:extraCSSClass %> "><%: Model.EditViewFriendlyTitle %></span> <% } else { %> <input name="<%: formElement.ElementName %>" id="<%: formElement.Guid %>" type="hidden" value="<%: Model.GetDefaultValue() %>" class="Form__Element FormHidden FormHideInSummarized" <%: Html.Raw(Model.AttributesString) %> data-f-type="hidden" /> <% } %>
Save your view under views/shared/elementblocks/
When using the element, just fill in the “Predefined value” with the key used by Querystring or form post.
It pops up in the form elements pane:
And in onpage edit:
In email placeholder you’ll find #OrderId#:
Use it wizely with httpGet or HttpPost
More reading
- https://www.dcaric.com/blog/creating-placeholders-for-episerver-forms
- https://www.david-tec.com/2016/01/building-out-a-custom-form-element-with-the-new-episerver-forms/
- https://devblog.gosso.se/tag/episerver-forms/
SEO terms:
- Hidden post value in element of Episerver Form
- How to extend episerver forms with querystring value