winform和wpf等客户端使用数据模型验证

首先我们实现一个TestModel类,里面包含几个简单的属性,然后指定几个Attribute

public class TestModel
    {
        [Required(ErrorMessage = "名称不能为空")]
        public string Name { get; set; }
        [StringLength(12, ErrorMessage = "编号不能超过11位")]
        public string OrderNum { get; set; }
    }

然后实现一个ValidatetionHelper静态类,这里主要用到的是Validator.TryValidateObject方法。.

public static class ValidatetionHelper
    {
        public static ValidResult IsValid(object value)
        {
            ValidResult result = new ValidResult();
            try
            {
                var validationContext = new ValidationContext(value, null, null);
                var results = new List<ValidationResult>();
                var isValid = Validator.TryValidateObject(value, validationContext, results, true);

                if (!isValid)
                {
                    result.IsVaild = false;
                    result.ErrorMembers = new List<ErrorMember>();
                    foreach (var item in results)
                    {
                        result.ErrorMembers.Add(new ErrorMember()
                        {
                            ErrorMessage = item.ErrorMessage,
                            ErrorMemberName = item.MemberNames.FirstOrDefault()
                        });
                    }
                }
                else
                {
                    result.IsVaild = true;
                }
            }
            catch (Exception ex)
            {
                result.IsVaild = false;
                result.ErrorMembers = new List<ErrorMember>();
                result.ErrorMembers.Add(new ErrorMember()
                {
                    ErrorMessage = ex.Message,
                    ErrorMemberName = "Internal error"
                });
            }

            return result;
        }
    }

然后写一个测试代码:

TestModel testModel = new TestModel();
            testModel.OrderNum = "1111111111111111111111111111";

            var result = ValidatetionHelper.IsValid(testModel);
            if (!result.IsVaild)
            {
                foreach (ErrorMember errorMember in result.ErrorMembers)
                {
                    Console.WriteLine(errorMember.ErrorMemberName + ":" + errorMember.ErrorMessage);
                }
            }

查看输出结果:

winform和wpf等客户端使用数据模型验证通过测试,可以看到得到正确的验证结果。