Search code examples
asp.net-mvcsilverlight.net-4.0data-annotationsbuddy-class

Validation does not work when I use Validator.TryValidateObject


DataAnnotations does not work with buddy class. The following code always validate true. Why ?

var isValid = Validator.TryValidateObject(new Customer(), Context, results, true);

and here is the buddy class.

public partial class Customer 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
}

[MetadataType(typeof(CustomerMetaData))]
public partial class Customer 
{ 
    public class CustomerMetaData 
    { 
        [Required(ErrorMessage = "You must supply a name for a customer.")]        
        public string Name { get; set; } 
    } 
}

Here is another thread with same question., but no answer. link text


Solution

  • I found the answer here: http://forums.silverlight.net/forums/p/149264/377212.aspx

    MVC recognizes the MetaDataType attribute, but other projects do not. Before validating, you need to manually register the metadata class:

    TypeDescriptor.AddProviderTransparent(
                new AssociatedMetadataTypeTypeDescriptionProvider(typeof(Customer), typeof(CustomerMetadata)), typeof(Customer));
    
    var isValid = Validator.TryValidateObject(new Customer(), context, results, true);