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

时间:2015-03-10 14:44:55

标签: asp.net sitecore sitecore7.2 web-forms-for-marketers

我尝试在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的ustom用户控制字段上正常工作。

1 个答案:

答案 0 :(得分:4)

您需要将验证代码移至实现FormCustomValidator的新类。

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验证文件夹中添加一个BaseValidator项,通常是此路径; /sitecore/system/Modules/Web Forms for Marketers/Settings/Validation。将程序集和类添加到项目中。

现在针对您的自定义字段,在验证字段中添加新的BaseValidator项目,并将其添加到其中。

有关完整示例,请参阅wffm custom form validator的这篇文章