Sitecore CustomValidator 不会在 WFFM 自定义字段上触发

Sitecore CustomValidator does not fire on WFFM custom field

我尝试在 Sitecore 上的 WFFM 上扩展 SingleLineText 字段。该字段将具有 CustomValidator。但是当页面回发时,ServerValidate 事件不会触发。下面的代码片段。

public class SingleLineText : Sitecore.Form.Web.UI.Controls.SingleLineText
{
   protected override void OnInit(EventArgs e)
   {
       base.OnInit(e);

       var validator = new CustomValidator() { Display = ValidatorDisplay.None };
       validator.ServerValidate += this.Validator_ServerValidate;
       this.generalPanel.Controls.Add(validator);
    }
    protected void Validator_ServerValidate(object source, ServerValidateEventArgs args)
    {
         // does not fire
         var validator = source as IValidator;
         args.IsValid = this.IsValid(validator);
    }
}

相同的代码在具有 ascx 的自定义用户控制字段上工作正常。

您需要将验证代码移动到实现 FormCustomValidator.

的新 class
public class MySingleLineTextValidator : FormCustomValidator
{ 
    protected override bool EvaluateIsValid()
    {
        if (!String.IsNullOrEmpty(base.ControlToValidate))
        {
            Control controlToValidate = this.FindControl(base.ControlToValidate);
            //Code to validate
        }

        return false;
    }}

然后你需要在WFFM Validation Folder中添加一个BaseValidator Item,通常是这个路径; /sitecore/system/Modules/Web Forms for Marketers/Settings/Validation。将程序集和 class 添加到项目中。

现在针对您的自定义字段,在验证字段中添加新的 BaseValidator 项,就这样。

查看 wffm custom form validator 的 post 以获得完整示例