C# 如何将参数传递给Sitecore中的自定义验证器
我有一个自定义验证器类来验证C# 如何将参数传递给Sitecore中的自定义验证器,c#,asp.net,sitecore,sitecore8,C#,Asp.net,Sitecore,Sitecore8,我有一个自定义验证器类来验证常规链接字段类型。它检查说明字段的字段值是否不超过15个字符。 但如果同一个或另一个模板的链接字段需要20个字符怎么办 有没有办法,我可以把整数作为参数传递。如果是,如何传递和使用它。 此外,还可以在基本模板的字段级别执行。(以便我可以为每个此类字段定义限制) 命名空间自定义验证器 { //此验证器确保链接的description属性为空或长度为15个字符。 [可序列化] 公共类LinkTextValidator:StandardValidator { 公共重写字符串
常规链接
字段类型。它检查说明
字段的字段值是否不超过15个字符。但如果同一个或另一个模板的链接字段需要20个字符怎么办 有没有办法,我可以把整数作为参数传递。如果是,如何传递和使用它。
此外,还可以在基本模板的字段级别执行。(以便我可以为每个此类字段定义限制)
命名空间自定义验证器
{
//此验证器确保链接的description属性为空或长度为15个字符。
[可序列化]
公共类LinkTextValidator:StandardValidator
{
公共重写字符串名称{get{return“Link text validator”;}
公共LinkTextValidator(){}
publicLinkTextValidator(SerializationInfo,StreamingContext上下文):基(info,context){}
受保护的重写验证器结果求值()
{
Field=this.GetField();
如果(字段==null)
返回验证结果。有效;
string fieldValue=this.ControlValidationValue;
if(string.IsNullOrEmpty(fieldValue)| | string.Compare(fieldValue,“”,StringComparison.InvariantCulture)==0)
返回验证结果。有效;
XmlValue XmlValue=新的XmlValue(字段值,“链接”);
字符串属性=xmlValue.GetAttribute(“文本”);
如果(!string.IsNullOrEmpty(xmlValue.GetAttribute(“文本”)&&Convert.ToString(xmlValue.GetAttribute(“文本”)).Length>15)
{
this.Text=this.GetText(“在链接字段\“{0}\”、字段.DisplayName中,描述字段应不超过15个字符);
返回此.GetFailedResult(ValidatorResult.FatalError);
}
其他的
{
返回验证结果。有效;
}
}
受保护的重写ValidatorResult GetMaxValidatorResult()
{
返回此.GetFailedResult(ValidatorResult.FatalError);
}
}
}
看看如何使用regex验证器验证电子邮件:
您可以添加参数,稍后在验证程序代码中读取这些参数:
受保护的覆盖验证器结果求值()
{
字符串controlValidationValue=this.controlValidationValue;
if(string.IsNullOrEmpty(controlValidationValue))
返回验证结果。有效;
字符串模式=this.Parameters[“pattern”];
if(string.IsNullOrEmpty(pattern)| | new Regex(pattern,RegexOptions.IgnoreCase).IsMatch(controlValidationValue))
返回验证结果。有效;
this.Text=this.GetText(“字段\“{0}\”与正则表达式\“{1}\”、this.GetFieldDisplayName()、模式不匹配);
返回此.GetFailedResult(ValidatorResult.Error);
}
看看如何使用regex验证器验证电子邮件:
您可以添加参数,稍后在验证程序代码中读取这些参数:
受保护的覆盖验证器结果求值()
{
字符串controlValidationValue=this.controlValidationValue;
if(string.IsNullOrEmpty(controlValidationValue))
返回验证结果。有效;
字符串模式=this.Parameters[“pattern”];
if(string.IsNullOrEmpty(pattern)| | new Regex(pattern,RegexOptions.IgnoreCase).IsMatch(controlValidationValue))
返回验证结果。有效;
this.Text=this.GetText(“字段\“{0}\”与正则表达式\“{1}\”、this.GetFieldDisplayName()、模式不匹配);
返回此.GetFailedResult(ValidatorResult.Error);
}
请检查下一个类:是否按模板验证字段的maxlength
此规则被指定给一个字段
[Serializable]
public class MaxLengthFieldbyTemplateValidator : StandardValidator
{
/// <summary>
/// The template separator in Parameters field
/// </summary>
private const char FieldLengthSeparator = '=';
/// <summary>
/// The template length separator in Parameters field
/// </summary>
private const char TemplateLengthSeparator = '~';
/// <summary>
/// Gets the name.
///
/// </summary>
///
/// <value>
/// The validator name.
/// </value>
public override string Name
{
get
{
return "Max Length";
}
}
/// <summary>
/// Initializes a new instance of the <see cref="T:Sitecore.Data.Validators.FieldValidators.MaxLengthFieldValidator"/> class.
///
/// </summary>
public MaxLengthFieldbyTemplateValidator()
{
}
/// <summary>
/// Initializes a new instance of the <see cref="T:Sitecore.Data.Validators.FieldValidators.MaxLengthFieldValidator"/> class.
///
/// </summary>
/// <param name="info">The serialization info.
/// </param><param name="context">The context.
/// </param>
public MaxLengthFieldbyTemplateValidator(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
/// <summary>
/// When overridden in a derived class, this method contains the code to determine whether the value in the input control is valid.
///
/// </summary>
///
/// <returns>
/// The result of the evaluation.
///
/// </returns>
protected override ValidatorResult Evaluate()
{
return IsValid(GetItem().TemplateID.ToString()) ? ValidatorResult.Valid : this.GetFailedResult(ValidatorResult.CriticalError);
}
private bool IsValid(string currentItemTemplateId)
{
var validatorParameters = Parameters;
// parsing all validators,they are splited by & char
foreach (var currentParam in validatorParameters)
{
//checking if current item template id is in parameters value
if (currentParam.Value.Contains(currentItemTemplateId))
{
if (currentParam.Value.Contains(TemplateLengthSeparator))
{
var maxLenghKeyValuePair = currentParam.Value.Split(TemplateLengthSeparator)[1];
if (maxLenghKeyValuePair.Contains(FieldLengthSeparator))
{
var maxLengthValue = maxLenghKeyValuePair.Split(FieldLengthSeparator)[1];
int intMaxLengthValue = MainUtil.GetInt(maxLengthValue, 0);
string controlValidationValue = this.ControlValidationValue;
if (string.IsNullOrEmpty(controlValidationValue) ||
controlValidationValue.Length <= intMaxLengthValue)
{ return true; }
else
{
Text = GetText("The maximum length of the field \"{0}\" is {1} characters.", this.GetFieldDisplayName(), maxLengthValue);
return false;
}
}
}
}
}
return true;
}
/// <summary>
/// Gets the max validator result.
///
/// </summary>
///
/// <remarks>
/// This is used when saving and the validator uses a thread. If the Max Validator Result
/// is Error or below, the validator does not have to be evaluated before saving.
/// If the Max Validator Result is CriticalError or FatalError, the validator must have
/// been evaluated before saving.
///
/// </remarks>
///
/// <returns>
/// The max validator result.
///
/// </returns>
protected override ValidatorResult GetMaxValidatorResult()
{
return this.GetFailedResult(ValidatorResult.CriticalError);
}
}
[可序列化]
公共类MaxLengthFieldbyTemplateValidator:StandardValidator
{
///
///参数字段中的模板分隔符
///
private const char FieldLengthSeparator='=';
///
///参数字段中的模板长度分隔符
///
private const char TemplateLengthSeparator='~';
///
///获取名称。
///
///
///
///
///验证程序名称。
///
公共重写字符串名
{
得到
{
返回“最大长度”;
}
}
///
///初始化类的新实例。
///
///
公共MaxLengthFieldbyTemplateValidator()
{
}
///
///初始化类的新实例。
///
///
///序列化信息。
///上下文。
///
公共MaxLengthFieldbyTemplateValidator(SerializationInfo,StreamingContext上下文)
:base(信息、上下文)
{
}
///
///在派生类中重写时,此方法包含用于确定输入控件中的值是否有效的代码。
///
///
///
///
///评估的结果。
///
///
受保护的重写验证器结果求值()
{
返回IsValid(GetItem().TemplateID.ToString())?ValidatorResult.Validate:this.GetFailedResult(ValidatorResult.CriticalError);
}
私有布尔值有效(字符串currentItemTemplateId)
{
var参数=参数;
//在分析所有验证器时,它们被&char拆分
foreach(validatorParameters中的var currentParam)
{
//检查当前项目模板id是否在参数值中
if(currentParam.Value.Contains(currentItemTemplateId))
{
if(currentParam.Value.Contains(TemplateLengthSeparator))
{
var maxLenghKeyValuePair=currentParam.Value.Split(TemplateLengthSeparator)[1];
if(MaxLengKeyValuePair.Contains(FieldLengthSeparator))
{
var maxLengthValue=maxLenghKeyValuePair.Split(FieldLengthSeparator)[1];
int intMaxLengthValue=MainUtil.GetInt(maxLengthValue,0);
字符串controlValidationValue=this.controlValidationValue;