如何在 C# 中使用数据注释进行验证?

How to Validate with data anotation in c#?

我有一个简单的程序可以使用数据注释进行验证,但是当我使用 MetadataType 进行单独的数据注释时,结果验证始终为真。为什么下面代码的结果总是正确的?

public partial class User
{
    public string FullName { get; set; }
}


[MetadataType(typeof(UserMetadata))]
public partial class User
{
}

public class UserMetadata
{
    [Required]
    [MinLength(2)]
    public string FullName { get; set; }
}

class Program
{
    static void Main(string[] args)
    {

        var u = new User
        {
            // must raise error
            FullName = "A"
        };

        var context = new ValidationContext(u, null, null);
        var list = new List<ValidationResult>();
        var isCorrect = Validator.TryValidateObject(u, context, list, true);

        // isCorrect always is True 
        Console.WriteLine(isCorrect);
        Console.ReadKey();
    }
}

在 MVC 项目中,MetaDataType 属性被识别。其他项目将需要一点帮助。在开始验证之前,您需要注册元数据 class.

TypeDescriptor.AddProviderTransparent(new AssociatedMetadataTypeTypeDescriptionProvider(typeof(User), typeof(UserMetadata)), typeof(User));

这应该能让您正确地测试您的验证。

在 Jeremy Gruenwald 的相关主题回答中有更多关于此的信息 -> Validate data using DataAnnotations with WPF & Entity Framework