我尝试在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用户控制字段上正常工作。
答案 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的这篇文章