Определите, был ли определенный атрибут действительным в модели - PullRequest
0 голосов
/ 15 июня 2010

Создав свой собственный атрибут проверки, полученный из 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 используется неправильно.

Какие у меня варианты?

1 Ответ

0 голосов
/ 15 июня 2010

Я думаю, что имеет смысл иметь Enum с именем ExceptionType в атрибуте CustomValidationAttribute , который четко определяет тип возбужденного исключения.

В контроллере мы можем проверить тип исключения и обработать его соответствующим образом.

try
{

}
Catch(Exception e)
{
 Switch(e.ExceptionType)
 {
     case ExceptionType.Val1:

       // Handle accordingly  
       break;
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...