代码之家  ›  专栏  ›  技术社区  ›  Coppermill

类的DataAnnotations验证

  •  4
  • Coppermill  · 技术社区  · 16 年前

    我在一个纯C应用程序的项目中使用DataAnnotations,根据DataAnnotations属性验证模型/文档的最佳方法是什么?

    2 回复  |  直到 16 年前
        1
  •  14
  •   Nate Zaugg    15 年前

    这是C#4的内置部分

    var result = new List<ValidationResult>();
    bool valid = Validator.TryValidateObject(Vehicle, new ValidationContext(Vehicle, null, null), result);
    

        2
  •  7
  •   Coppermill    16 年前

    不是我而是我的朋友史蒂夫·桑德森:

    internal static class DataAnnotationsValidationRunner
    {
        public static IEnumerable<ErrorInfo> GetErrors(object instance)
        {
            return from prop in TypeDescriptor.GetProperties(instance).Cast<PropertyDescriptor>()
                   from attribute in prop.Attributes.OfType<ValidationAttribute>()
                   where !attribute.IsValid(prop.GetValue(instance))
                   select new ErrorInfo(prop.Name, attribute.FormatErrorMessage(string.Empty), instance);
        }
    }
    

    例如,如果希望[DataType(DataType.EmailAddress)]实际验证电子邮件地址,或者希望支持[MetadataType]属性,则可能需要对此进行增强。