Объедините валидацию DataAnnotations со сложными бизнес-правилами - PullRequest
1 голос
/ 08 октября 2009

Я понимаю, что аннотирую свойства класса с базовой требуемой и минимальной длиной и получаю все преимущества проверки на стороне сервера asp.net mvc и на стороне клиента.

Однако у кого-нибудь есть ссылка, показывающая, как вы комбинируете эту «базовую» проверку с более сложными бизнес-правилами. Как бы я запустил функции бизнес-правил, например, заказал ли клиент что-нибудь за последний год (требуется попадание в базу данных), и при этом использовал бы те же данные DataAnnotation и mvc для проверки?

Цель: не нужно два способа генерирования и вывода методов проверки.

Ответы [ 4 ]

4 голосов
/ 08 октября 2009

С http://msdn.microsoft.com/en-us/library/dd901590%28VS.95%29.aspx:

Чтобы создать настраиваемые проверки проверки, вы можете либо создать класс, производный от класса ValidationAttribute, либо создать метод, который выполняет проверку проверки и ссылаться на этот метод при применении CustomValidationAttribute к члену данных. Когда вы создаете класс, производный от ValidationAttribute, переопределите метод IsValid, чтобы обеспечить логику для вашей настраиваемой проверки проверки.

Кажется, там есть пример кода.

3 голосов
/ 08 октября 2009

Аннотации данных запускаются до того, как ваше действие будет вызвано. Затем, независимо от того, была ли проверка успешной или нет, действие все еще вызывается. Если DA обнаружил недействительные данные, ваш ModelState будет недействительным.

Оказавшись здесь, вы все равно можете выполнить любую проверку для своих бизнес-правил, которую вы обычно делаете без аннотации данных, если хотите. В своем действии вы можете добавить ошибки в ModelState, даже если проверка аннотации данных прошла успешно. В этом случае вы добавляете свои ошибки с ModelState.addError, и эти ошибки добавляются к любой ошибке, предоставленной DA. Поэтому, по вашему мнению, не имеет значения, откуда возникла ошибка.

Или, если ваши правила общие, вы можете написать свои собственные теги аннотаций. Объект аннотации данных распространяется вместе с его источником, поэтому у вас есть полный контроль над ним.

1 голос
/ 01 августа 2011

Посмотрите на следующую статью, где вы можете использовать DataAnnotations несколько раз в одном поле, сравнить N количество свойств и N количество значений ....

http://www.codeproject.com/KB/validation/MultipleDataAnnotations.aspx

1 голос
/ 14 марта 2011

Вы можете использовать VAB (Application Validation Block) из Enterprise Library 5 от Microsoft, который на самом деле основан на классе DataAnnotations, но вы очень легко выполняете сложную бизнес-логику с помощью конфигурации ... Я бы посоветовал вам проверить это ...

...