Sitecore CustomValidator не срабатывает в пользовательском поле WFFM

Я пытаюсь расширить поле SingleLineText в WFFM на Sitecore. В этом поле будет 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.


person Yoshihisa Ozaki    schedule 10.03.2015    source источник


Ответы (1)


Вы захотите переместить свой код проверки в новый класс, который реализует 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;
    }}

Затем вам нужно будет добавить элемент BaseValidator в папку проверки WFFM, обычно по этому пути; /sitecore/system/Modules/Web Forms for Marketers/Settings/Validation. Добавьте сборку и класс к элементу.

Теперь против своего пользовательского поля добавьте новый элемент BaseValidator в поле Validation и все.

См. этот пост валидатор пользовательской формы wffm для полного примера

person Jonathan Robbins    schedule 10.03.2015