zoukankan      html  css  js  c++  java
  • 类字段属性自动验证

    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
  • 相关阅读:
    数据库_连接查询
    日志
    日常小技巧
    『转载』OpenLayers 5 使用turf.js渲染克里金插值计算的等值面
    Openlayers3中如何优雅的表示等值面
    远程桌面拷贝超大文件
    turf.js intersect()裁剪存在空洞
    web worker示例demo
    meta标签作用
    geojson 标准格式学习
  • 原文地址:https://www.cnblogs.com/hcfan/p/6019650.html
Copyright © 2011-2022 走看看