Как сделать поле обязательным, исходя из значения другого поля - PullRequest
0 голосов
/ 31 октября 2018

У меня есть ViewModel с некоторыми общедоступными свойствами, которые имеют аннотации данных, например:

[Required]
public string PointOfContact { get; set; }

Который работает просто отлично. У меня есть вся необходимая сантехника для отображения правильного форматирования элемента управления и сообщений об ошибках при сбое проверки.

Однако у меня есть несколько полей, которые условно обязательны для заполнения в зависимости от значения флажка. Например:

public bool Briefing { get; set; }
public DateTime BriefingTime { get; set; }

В этом случае я хочу, чтобы BriefingTime требовался только в том случае, если установлен флажок, связанный со свойством Briefing. Видимость BriefingTime уже привязана к Briefing, поэтому все, что мне нужно, это чтобы он имел обычное поведение Required при установленном флажке.

Есть ли способ сделать это "из коробки", или мне нужно написать свой собственный класс аннотации данных? Как бы выглядел такой класс?

1 Ответ

0 голосов
/ 31 октября 2018

Вы можете написать свой собственный ValidationAttribute:

public class BriefingTimeRequiredAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var model = (MyModel)validationContext.ObjectInstance;
        if (model.Briefing && !model.BriefingTime.HasValue)
        {
            return new ValidationResult("BriefingTime is required.");
        }
        return ValidationResult.Success;
    }
}
...