IValidatableObject не запущен - PullRequest
       19

IValidatableObject не запущен

0 голосов
/ 21 сентября 2011

Я пытаюсь использовать объект IValidatableObject, как описано здесь http://davidhayden.com/blog/dave/archive/2010/12/31/ASPNETMVC3ValidationIValidatableObject.aspx.

Но он просто не срабатывает, когда я пытаюсь проверить, ModelState.IsValid всегда true.

Вот мой код модели:

[MetadataType(typeof(RegistrationMetaData))]
public partial class Registration : DefaultModel
{
    [Editable(false)]
    [Display(Name = "Property one")]
    public int PropertyOne { get; set; }
}

public class RegistrationMetaData :IValidatableObject
{
    [Required(ErrorMessage = "Customer no. is required.")]
    [Display(Name = "Customer no.")]
    public string CustomerNo { get; set; }

    [Display(Name = "Comments")]
    public string Comments { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (new AccountModel().GetProfile(CustomerNo) == null)
            yield return new ValidationResult("Customer no. is not valid.", new[] { "CustomerNo" });
    }
}

Я расширяю таблицу LINQ to SQL, которая называется Registration, мое первое предположение состояло в том, что это невозможно сделать в классе Meta, но я 'я не уверен?

Я не получаю никаких ошибок, и он просто прекрасно работает, но метод Validate не сработает.Что я пропустил?

1 Ответ

2 голосов
/ 21 сентября 2011

Это потому, что именно модель Registration должна реализовывать IValidatableObject, а не RegistrationMetaData:

[MetadataType(typeof(RegistrationMetaData))]
public partial class Registration : IValidatableObject
{
    [Editable(false)]
    [Display(Name = "Property one")]
    public int PropertyOne { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (new AccountModel().GetProfile(CustomerNo) == null)
            yield return new ValidationResult("Customer no. is not valid.", new[] { "CustomerNo" });
    }
}

public class RegistrationMetaData
{
    [Required(ErrorMessage = "Customer no. is required.")]
    [Display(Name = "Customer no.")]
    public string CustomerNo { get; set; }

    [Display(Name = "Comments")]
    public string Comments { get; set; }
}
...