Я создал настраиваемый атрибут проверки путем создания подкласса 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; }
}