A critical vulnerability was discovered in React Server Components (Next.js). Our systems remain protected but we advise to update packages to newest version. Learn More

Jacob Khan
May 31, 2010
  12976
(0 votes)

XForms validation

I recently got a question from a partner if it is possible to add validation to check if two fields are equal to each other. The scenario was that a user is asked for their email address and then asked to confirm it. I have already blogged about how to add a simple regular expression validation but this requires a bit more code but not much. Anders Hattestad wrote a great blog post on how to extend XForms and with the help of his blog post I got my validation working.

I start by adding a regular expression validation in my global.asax.

   1: protected void Application_Start(Object sender, EventArgs e)
   2:         {
   3:             EPiServer.XForms.DataTypes.Types.Add("Similar", "aretheysimilar");
   4:             XFormControl.ControlSetup += new EventHandler(XForm_ControlSetup);
   5:         }

This is only done to get the validation to show up in our drop down list.xformssim

When I select two different textboxes I mark both as similar in the drop down list.

On the event control.ControlsCreated += I attach and add some code.

First thing I do is that I try to find the regular expression validation added with my dummy regex.

 

   1: List<string> equalcontrolstocheck = new List<string>();
   2:           List<string> removecontrols = new List<string>();
   3:           foreach (Control item in  formControl.Controls)
   4:           {
   5:               if (item is System.Web.UI.WebControls.RegularExpressionValidator)
   6:               {
   7:                   if (((RegularExpressionValidator)item).ValidationExpression == "aretheysimilar")
   8:                   {
   9:                       Control c = formControl.FindControl(((RegularExpressionValidator)item).ControlToValidate);
  10:  
  11:                       equalcontrolstocheck.Add(c.ID);
  12:                       removecontrols.Add(item.ID);
  13:                   }
  14:               }
  15:           }

I then add the controls to a list and the controls they validate. I then remove the regular expression validation controls and add a compare control saying that both controls should be equal

 

   1: if (equalcontrolstocheck.Count > 1)
   2:           {
   3:  
   4:               formControl.Controls.Remove(formControl.FindControl(removecontrols[0]));
   5:               formControl.Controls.Remove(formControl.FindControl(removecontrols[1]));
   6:  
   7:               CompareValidator comparevalid = new CompareValidator();
   8:               comparevalid.ControlToValidate = equalcontrolstocheck[0];
   9:               comparevalid.ControlToCompare = equalcontrolstocheck[1];
  10:               comparevalid.Type = ValidationDataType.String;
  11:               comparevalid.Operator = ValidationCompareOperator.Equal;
  12:               comparevalid.Text = "They do not match";
  13:               comparevalid.ID = "emailisequal";
  14:               comparevalid.Display = ValidatorDisplay.Dynamic;
  15:               comparevalid.ValidationGroup = "XForm";
  16:  
  17:               formControl.Controls.Add(comparevalid);
  18:  
  19:           }

The end results are that if they are not equal it will show

 

similar

May 31, 2010

Comments

Please login to comment.
Latest blogs
Cleaning Up Content Graph Webhooks in PaaS CMS: Scheduled Job

The Problem Bit of a niche issue, but we are building a headless solution where the presentation layer is hosted on Netlify, when in a regular...

Minesh Shah (Netcel) | Dec 17, 2025

A day in the life of an Optimizely OMVP - OptiGraphExtensions v2.0: Enhanced Search Control with Language Support, Synonym Slots, and Stop Words

Supercharge your Optimizely Graph search experience with powerful new features for multilingual sites and fine-grained search tuning. As search...

Graham Carr | Dec 16, 2025

A day in the life of an Optimizely OMVP - Optimizely Opal: Specialized Agents, Workflows, and Tools Explained

The AI landscape in digital experience platforms has shifted dramatically. At Opticon 2025, Optimizely unveiled the next evolution of Optimizely Op...

Graham Carr | Dec 16, 2025

Optimizely CMS - Learning by Doing: EP09 - Create Hero, Breadcrumb's and Integrate SEO : Demo

  Episode 9  is Live!! The latest installment of my  Learning by Doing: Build Series  on  Optimizely Episode 9 CMS 12  is now available on YouTube!...

Ratish | Dec 15, 2025 |

Building simple Opal tools for product search and content creation

Optimizely Opal tools make it easy for AI agents to call your APIs – in this post we’ll build a small ASP.NET host that exposes two of them: one fo...

Pär Wissmark | Dec 13, 2025 |

CMS Audiences - check all usage

Sometimes you want to check if an Audience from your CMS (former Visitor Group) has been used by which page(and which version of that page) Then yo...

Tuan Anh Hoang | Dec 12, 2025