是否可以在
WPF或
Winforms类中使用System.ComponentModel.DataAnnotations并且它属于属性(例如required,Range,…)?
我想把我的验证放到attributs上.
谢谢
编辑1:
我写这个:
public class Recipe { [required] [CustomValidation(typeof(AWValidation),"ValidateId",ErrorMessage = "nima")] public int Name { get; set; } } private void Window_Loaded(object sender,RoutedEventArgs e) { var recipe = new Recipe(); recipe.Name = 3; var context = new ValidationContext(recipe,serviceProvider: null,items: null); var results = new List<System.ComponentModel.DataAnnotations.ValidationResult>(); var isValid = Validator.TryValidateObject(recipe,context,results); if (!isValid) { foreach (var validationResult in results) { MessageBox.Show(validationResult.ErrorMessage); } } } public class AWValidation { public bool ValidateId(int ProductID) { bool isValid; if (ProductID > 2) { isValid = false; } else { isValid = true; } return isValid; } }
但即使我将3设置为我的财产也没有发生任何事情
解决方法
是的,you can.这是
another article说明这一点.您甚至可以通过手动创建
ValidationContext在控制台应用程序中执行此操作:
public class DataAnnotationsValidator { public bool TryValidate(object @object,out ICollection<ValidationResult> results) { var context = new ValidationContext(@object,items: null); results = new List<ValidationResult>(); return Validator.TryValidateObject( @object,results,validateallProperties: true ); } }
更新:
这是一个例子:
public class Recipe { [required] [CustomValidation(typeof(AWValidation),ErrorMessage = "nima")] public int Name { get; set; } } public class AWValidation { public static ValidationResult ValidateId(int ProductID) { if (ProductID > 2) { return new ValidationResult("wrong"); } else { return ValidationResult.Success; } } } class Program { static void Main() { var recipe = new Recipe(); recipe.Name = 3; var context = new ValidationContext(recipe,items: null); var results = new List<ValidationResult>(); var isValid = Validator.TryValidateObject(recipe,true); if (!isValid) { foreach (var validationResult in results) { Console.WriteLine(validationResult.ErrorMessage); } } } }
请注意,ValidateId方法必须是public static并返回ValidationResult而不是boolean.另请注意传递给TryValidateObject方法的第四个参数,如果希望计算自定义验证器,则必须将其设置为true.
原文地址:https://www.jb51.cc/csharp/244504.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。