2013-08-29 3 views
1

Я работаю над проектом MVC 4. У меня возникает проблема с несколькими атрибутами пользовательской проверки для одного свойства. Предположим, у меня есть 3 пользовательский атрибут проверки для одного свойства, такие как:Несколько атрибутов пользовательской проверки для одного свойства

public class Test 
{ 
    [customAttribute1] 
    [customAttribute2] 
    [customAttribute3] 
    public string property1 { get; set; } 
} 

В настоящее время, когда я отправляю его форме, чем все три пользовательских валидация выполняются на имущество (независимо от того, является ли первый проход проверки или не).

Что я хочу, если проверка customAttribute1 завершена, так как нет необходимости проверять свойство со следующим следующим пользовательским атрибутом. Как я могу достичь этого?

+1

Этот ответ может помочь: http://stackoverflow.com/questions/2301481/is-there-any-way-to-stop-dataannotation-validation-after-the-first-failure Я также рассмотрел бы проверку как, например, FluentValidation (http://fluentvalidation.codeplex.com/), который реализует это. –

+0

Это означает, что эти три атрибута связаны между собой. Почему бы вам не написать их в рамках одного метода атрибута и использовать его как один атрибут. –

+0

Отношения, такие как [Обязательно], чем [CheckUniqueName], поэтому, если свойство имеет значение null, то почему дополнительная обработка – user1740381

ответ

0

Заказ или выполнение условно не поддерживается AFAIK.

Лучше всего иметь все эти 3 проверки в одном и том же атрибуте.

Если вы плохо нуждаетесь в таком валидации, то Fluent Validation может сделать это за вас.

1

Смысл этого поведения, чтобы вернуться назад (к UI) все ошибки в модели, так что пользователь может исправить все ошибки, в то же время ...

Допустим, вы хотите вам пароль должно быть не менее 8 символов и иметь как минимум верхний регистр и номер. То, как вы хотите, чтобы ваша проверка выполнялась, заключается в том, чтобы остановить, если пароль недостаточно длинный, не проверяя остальное. Типичный сценарий использования:

User sets password "foo" -> submit 
error - Password too short 
User sets it to "foofoofoo" 
error - Password must have an uppercase 
User sets it to "FooFooFoo" 
error - Password must have a number 
User goes away frustrated... 

Таким образом, если 3 атрибуты должны быть проверены вместе, мое предложение, чтобы сохранить это поведение. Если 3 являются эксклюзивными, то делайте, как предложили другие, и объедините их в один атрибут.

Смежные вопросы