• 类字段属性自动验证


    1.验证特性定义

    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
        public class CountryAttribute : ValidationAttribute
        {
            public string AllowCountry { get; set; }
            /// <summary>
            /// 验证数据是否合法
            /// </summary>
            /// <param name="value"></param>
            /// <returns></returns>
            public override bool IsValid(object value)
            {
                return string.Equals(value, AllowCountry);
            }
            /// <summary>
            /// 验证结果
            /// </summary>
            /// <param name="value"></param>
            /// <param name="validationContext"></param>
            /// <returns></returns>
            protected override ValidationResult IsValid(object value, ValidationContext validationContext)
            {
                if (string.Equals(value, AllowCountry))
                    return ValidationResult.Success;
                else
                    return new ValidationResult(string.Format("{0}-{1}-{2} 字段非法", validationContext.DisplayName, validationContext.MemberName, ErrorMessage), new[] { validationContext.MemberName });
            }
        }//end

    2.类属性定义

    public class test
        {
            /// <summary>
            /// 姓名1
            /// </summary>
            [CountryAttribute(AllowCountry = "fhc", ErrorMessage = "自定义错误1"), Display(Name = "姓名")]
            public string name { set; get; }
            [CountryAttribute(AllowCountry = "fhc2", ErrorMessage = "自定义错误2"), Display(Name = "姓名2")]
            public string name2 { set; get; }
            [Range(10, 70, ErrorMessage = "自定义错误")]
            public int age { set; get; }
    
        }//end

    3.验证结果方法

    /// <summary>
            /// 错误列表
            /// </summary>
            /// <param name="o"></param>
            /// <returns></returns>
            public List<string> ErrorList(object o)
            {
                List<string> list = new List<string>();
                var context = new ValidationContext(o, null, null);
    
                var results = new List<ValidationResult>();
                Validator.TryValidateObject(o, context, results, true);
    
                foreach (var validationResult in results)
                {
                    list.Add(validationResult.ErrorMessage);
                }
                return list;
            }

    4.实际使用

     test t = new test()
                {
                    age = 0,
                    name = "fan"
                };
                List<string> list = ErrorList(t);

    如果list长度为0则表示没有错误,否则则是错误列表。

    欢迎指正:haizi2014@qq.com
  • 相关阅读:
    zlog 使用手册
    Contribution and Coding Style Guide Bullet Physics Library
    Windows系统读写ext2/3/4文件系统的工具「ext2fsd」
    blender svn
    c# 各个版本
    c# Looping with the foreach statement
    C# 9.0 and .NET 5 – Modern Cross-Platform Development
    我的常用博客
    qml通过stacklayout实现页面切换
    JSON解析-android平台(转)
  • 原文地址:https://www.cnblogs.com/hcfan/p/6019650.html
Copyright © 2020-2023  润新知