Сложные сценарии проверки - PullRequest
3 голосов
/ 19 октября 2011

У меня есть несколько сложных сценариев проверки, в которых мне нужна помощь.

У меня есть ViewModel, которая выглядит так:

public class FooModel {
    public class BarModel {
        public string Name {get;set;}
        public DateTime? BirthDate {get;set;}
    }

    public List<BarModel> Bars {get;set;}

    // 10 BarModels added in controller
    public FooModel() { Bars = new List<BarModel>(); }

    public bool Choose1 {get;set;}
    public bool Choose2 {get;set;}
}

Теперь, в зависимости от значения Choose1, мне нужно либо подтвердить, что все BarModel имеют набор данных (Обязательная проверка), если Choose1 истинно, или если Choose1 ложно, то первые два элемента в списке будут игнорироваться. 1006 *

Во-вторых, если Choose2 имеет значение true, тогда я хочу собирать только дату рождения для каждого элемента в столбцах и игнорировать свойство Name.

Я посмотрел на пользовательский атрибут, но, похоже, нет хорошего способа применить его к вложенному классу и получить значения в родительском классе. Я также не нашел способа, которым я мог бы легко проверять только некоторые элементы в коллекции.

Есть предложения?

EDIT:

Я также рассмотрел IValidatableObject, но меня интересует решение, которое также будет работать на стороне клиента, если это возможно. Есть ли другие варианты?

1 Ответ

2 голосов
/ 19 октября 2011

Напишите свою собственную проверку с использованием IValidatableObject

public class FooModel : IValidatableObject {

public class BarModel {
    public string Name {get;set;}
    public DateTime? BirthDate {get;set;}
}

public List<BarModel> Bars {get;set;}

// 10 BarModels added in controller
public FooModel() { Bars = new List<BarModel>(); }

public bool Choose1 {get;set;}
public bool Choose2 {get;set;}

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
    if (Choose1)
    {
        // do your validation and return result if needed:
        yield return new ValidationResult("The title is mandatory.");
    }
    // ...
}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...