Создав собственный атрибут проверки, полученный из 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 используется неправильно.
Какие у меня варианты?
Хм, я не вижу, как это будет работать с привязкой к модели. Исключение будет происходить до вызова действия. Я также не уверен, что это хорошая идея просто основывать дизайн на бросании исключений в методе CustomValidationAttribute.IsValid. Я имею в виду, что если то, что я проверяю с ним, недействительно, я должен просто вернуть false. –