2016-11-09 12 views
0

私はデータで検証する簡単なプログラムを持っていますが、別のデータアノテーションのためにMetadataTypeを使用するときは、常に検証が真です。なぜコードの下の結果が常に真実なのか?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

関連する問題