您的位置:首页 > 其它

ValidationAttribute

2016-02-17 15:42 281 查看
项目需要引用DataAnnotations;

using System.ComponentModel.DataAnnotations;


在属性上声明Attribute

private string textContent;

[RequiredAttribute(ErrorMessage = "[用户名]不能为空")]
[StringLength(255, ErrorMessage = "[用户名]内容最大允许255个字符!")]
[RegularExpression("^[A-Za-z0-9]+$", ErrorMessage = "[用户名]只能输入字母、数字!")]
public string TextContent
{
get { return textContent; }
set { textContent = value; OnPropertyChanged("TextContent"); OnPropertyChanged("Error"); }
}

检测不合法的Attribute属性。首先获取类型中的所有属性,再遍历出不合法的Attribute

private readonly Dictionary<string, PropertyInfo> _propertyGetters = new Dictionary<string, PropertyInfo>();
        private readonly Dictionary<string, ValidationAttribute[]> _validators = new Dictionary<string, ValidationAttribute[]>();
PropertyInfo[] properties = GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo propertyInfo in properties)
{
object[] customAttributes = propertyInfo.GetCustomAttributes(typeof(ValidationAttribute), true);
if (customAttributes != null && customAttributes.Length > 0)
{
_validators.Add(propertyInfo.Name, customAttributes as ValidationAttribute[]);
_propertyGetters.Add(propertyInfo.Name, propertyInfo);
}
}


最后是通过获得的不合法Attribute生成错误信息,绑定到界面控件上
public string Error
{
get
{
IEnumerable<string> errors = from d in _validators
from v in d.Value
where !v.IsValid(_propertyGetters[d.Key].GetValue(this, null))
select v.ErrorMessage;
return string.Join(",", errors.ToArray());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: