/// <summary>
 /// Creates an email-address control.
 /// </summary>
 /// <param name="setup">The setup object for the control. Do not pass null.</param>
 /// <param name="validationMethod">A function that validates the value entered by the user and returns a result. Do not pass null.</param>
 public static NavFormControl CreateEmail(NavFormControlSetup setup, Func <string, NavFormControlValidationResult> validationMethod) =>
 new NavFormControl(
     setup,
     validationResultHandler => {
     return(new EmailAddressControl(
                "",
                false,
                setup: setup.AutoCompleteResource != null
                                                        ? EmailAddressControlSetup.CreateAutoComplete(
                    setup.AutoCompleteResource,
                    placeholder: setup.Placeholder,
                    triggersActionWhenItemSelected: true)
                                                        : EmailAddressControlSetup.Create(placeholder: setup.Placeholder),
                validationMethod: (postBackValue, validator) => validationResultHandler(validationMethod(postBackValue), validator)));
 });
 /// <summary>
 /// Creates an email-address control.
 /// </summary>
 /// <param name="value">Do not pass null.</param>
 /// <param name="allowEmpty"></param>
 /// <param name="setup">The setup object for the email-address control.</param>
 /// <param name="maxLength">The maximum number of characters a user can input.</param>
 /// <param name="validationMethod">The validation method. Pass null if you’re only using this control for page modification.</param>
 public EmailAddressControl(
     string value, bool allowEmpty, EmailAddressControlSetup setup = null, int?maxLength = null, Action <string, Validator> validationMethod = null)
 {
     setup = setup ?? EmailAddressControlSetup.Create();
     (Labeler, PageComponent, Validation) = setup.TextControlSetup.LabelerAndComponentAndValidationGetter(
         value,
         allowEmpty,
         null,
         maxLength,
         (postBackValue, validator) => {
         var errorHandler   = new ValidationErrorHandler("email address");
         var validatedValue = maxLength.HasValue
                                                              ? validator.GetEmailAddress(errorHandler, postBackValue, allowEmpty, maxLength: maxLength.Value)
                                                              : validator.GetEmailAddress(errorHandler, postBackValue, allowEmpty);
         return(errorHandler.LastResult != ErrorCondition.NoError ? null : validatedValue);
     },
         validationMethod);
 }