Validator.TryValidateProperty не работает - PullRequest
9 голосов
/ 15 июня 2011

Я пытаюсь реализовать Validator.TryValidateProperty, и, несмотря на наличие [Обязательного] DataAnnotation, TryValidateProperty возвращает действительный ответ.

Вот частичный класс моего клиента:

[MetadataType(typeof(Customer.Metadata))]
public partial class Customer : global::System.Data.Objects.DataClasses.EntityObject 
{
   ...
private sealed class Metadata
    {

        [Required]
        [SSNValidAttribute(ErrorMessage = "The SSN should be 9 numeric characters without any punctuation.")]
        [DisplayName("SSN")]
        public String SSN { get; set; }
...

А вот код, который возвращает True:

...
var customer = new Customer();
            customer.SSN = "";
            var vc = new ValidationContext(customer, null, null);
            vc.MemberName = "SSN";
            var res = new List<ValidationResult>();
            var result = Validator.TryValidateProperty(customer.SSN, vc, res);
...

1 Ответ

14 голосов
/ 15 июня 2011

Хорошо, только что нашел решение для работы с запечатанным MetadataType классом.

var customer = new Customer();
TypeDescriptor.AddProviderTransparent
(new AssociatedMetadataTypeTypeDescriptionProvider
    (customer.GetType()), customer.GetType());
customer.SSN = "";
var vc = new ValidationContext(customer, null, null);
vc.MemberName = "SSN";
var res = new List<ValidationResult>();
var result = Validator.TryValidateProperty(customer.SSN, vc, res);

Мне пришлось добавить следующее:

TypeDescriptor.AddProviderTransparent
(new AssociatedMetadataTypeTypeDescriptionProvider
    (customer.GetType()), customer.GetType());

Нашел решение по этому адресу:http://forums.silverlight.net/forums/p/149264/333396.aspx

...