Я создал настраиваемый атрибут проверки, создав подкласс ValidationAttribute. Атрибут применяется к моей модели представления на уровне класса, так как ему необходимо проверить более одного свойства.
Я переопределяю
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
и возвращаю:
new ValidationResult("Always Fail", new List<string> { "DateOfBirth" });
во всех случаях, когда DateOfBirth является одним из свойств в моей модели представления. .
Когда я запускаю свое приложение, я вижу, что это происходит. Для ModelState.IsValid правильно установлено значение false, но когда я проверяю содержимое ModelState, я вижу, что свойство DateOfBirth НЕ содержит никаких ошибок. Вместо этого у меня есть пустая строка Key со значением null и исключение, содержащее строку, указанную в моем атрибуте проверки.
Это приводит к тому, что при использовании ValidationMessageFor в моем интерфейсе не отображается сообщение об ошибке. Если я использую ValidationSummary, я вижу ошибку. Это потому, что он не связан со свойством.
Похоже, он игнорирует тот факт, что я указал имя члена в результате проверки.
Почему это так и как это исправить?
ПРИМЕР КОДА ПО ЗАПРОСУ:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public class ExampleValidationAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
// note that I will be doing complex validation of multiple properties when complete so this is why it is a class level attribute
return new ValidationResult("Always Fail", new List<string> { "DateOfBirth" });
}
}
[ExampleValidation]
public class ExampleViewModel
{
public string DateOfBirth { get; set; }
}