Создав свой собственный атрибут проверки, полученный из System.ComponentModel.DataAnnotations.ValidationAttribute, я хочу иметь возможность определять с моего контроллера, был ли этот конкретный атрибут действительным в модели.
Мои настройки:
public class MyModel
{
[Required]
[CustomValidation]
[SomeOtherValidation]
public string SomeProperty { get; set; }
}
public class CustomValidationAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
// Custom validation logic here
}
}
Теперь, как мне определить из контроллера, прошла ли проверка CustomValidationAttribute успешно или нет?
Я просматривал свойство Exception для ModelError в ModelState, но у меня естьнет способа добавить в него пользовательское исключение из моего CustomValidationAttribute.
Сейчас я прибег к проверке конкретного сообщения об ошибке в ModelState:
public ActionResult PostModel(MyModel model)
{
if(ModelState.Where(i => i.Value.Errors.Where((e => e.ErrorMessage == CustomValidationAttribute.SharedMessage)).Any()).Any())
DoSomeCustomStuff();
// The rest of the action here
}
И изменил свой CustomValidationAttribute на:
public class CustomValidationAttribute : ValidationAttribute
{
public static string SharedMessage = "CustomValidationAttribute error";
public override bool IsValid(object value)
{
ErrorMessage = SharedMessage;
// Custom validation logic here
}
}
Мне не нравится полагаться на сопоставление строк, и таким образом свойство ErrorMessage используется неправильно.
Какие у меня варианты?