Пользовательский тест ValidationAttribute для всей модели - PullRequest
0 голосов
/ 16 апреля 2010

Я знаю, что это, вероятно, невозможно, но допустим, у меня есть модель с двумя свойствами.

Я пишу атрибут ValidationAttribute для одного из свойств. Может ли этот ВА взглянуть на другое имущество и принять решение?

Итак,

public class QuickQuote
{
    public String state { get; set; }

    [MyRequiredValidator(ErrorMessage = "Error msg")]
    public String familyType { get; set; }

Так что в приведенном выше примере может ли валидатор проверить, что находится в свойстве "state", и учесть это при проверке "familyType"?

Я знаю, что, возможно, могу сохранить объект в сеансе, но хотел бы избежать сохранения состояния, если это возможно.

Ответы [ 3 ]

2 голосов
/ 16 апреля 2010

Ваша пользовательская проверка может быть применена непосредственно к классу, взгляните на атрибут PropertiesMustMatch в классе AccountModels, который создается по умолчанию как часть шаблона проекта MVC в VS2008.

1 голос
/ 16 апреля 2010

Еще один способ добиться такого рода проверки состоит в том, чтобы ваша модель реализовала IDataErrorInfo. Таким образом, вы можете выполнить полную проверку модели представления.

На этой странице есть некоторая информация о реализации интерфейса IDataErrorInfo, примерно на 2/3 пути вниз под заголовком "Добавление интерфейса IDataErrorInfo"

0 голосов
/ 10 ноября 2013

Используйте ValidationContext, чтобы получить вашу модель:

 public class MyRequiredValidator: RequiredAttribute
    {
        public override bool RequiresValidationContext
        {
            get {return true;} //it needs another propertie in model            
        }

        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            QuickQuote model = (QuickQuote)validationContext.ObjectInstance;

            if (model.state == "single")
                return null;
            else
                return base.IsValid(value, validationContext);//familyType is require for married
        }      
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...