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 以获得完整示例
我尝试在 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
.
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 以获得完整示例