在给属性set值的时候,想要对值做一些验证,例如字符串长度,正则验证等。直接上代码
[RoleNameValid(1, 128, RegexHelper.CheckNamePattern)]
public string RoleName
{
get { return _RoleName; }
set
{
_RoleName = value;
}
}
public class RoleNameValidAttribute : ValidationAttribute
{
public int MinLength { get; set; }
public int MaxLength { get; set; }
public string RegexText { get; set; }
public RoleNameValidAttribute(int min, int max, string regex)
{
MinLength = min;
MaxLength = max;
RegexText = regex;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value == null)
{
value = "";
}
var role = validationContext.ObjectInstance as RoleInfoModel;
if (value.ToString() != role.RoleName)
{
var lengthResult = value.ToString().Length >= MinLength && value.ToString().Length <= MaxLength;
var regResult = new Regex(RegexText).Match(value.ToString()).Success;
if (!lengthResult)
{
return new ValidationResult("长度不符合");
}
else if (!regResult)
{
return new ValidationResult("命名非法");
}
else
{
return ValidationResult.Success;
}
}
else
{
return ValidationResult.Success;
}
}
}