2016-11-09 66 views
0

我有简单的程序,用数据anotatoin进行验证,但是当我使用MetadataType进行单独的数据转换时,resualt验证总是成立。为什么下面的代码结果总是如此?如何在c#中使用数据注释进行验证?

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(); 
    } 
} 

回答

0

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

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

这应该使你能够正确地测试你的验证。

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