Как программно включить/выключить атрибут проверки аннотаций данных

Итак, я использую ASP.NET MVC 3 и Entity Framework 4.1 (сначала код).

У меня есть такой класс:

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    [Range(18, 99)]
    public int Age { get; set; }
}

Проверка диапазона запускается правильно. Но, например, в некоторых ситуациях хотелось бы изменить диапазон для атрибута Возраст. Или даже выключить. Как я мог сделать это, не меняя класс модели? Возможно ли это сделать программно?


comment
Не могли бы вы уточнить, что вы подразумеваете под some situations? Вы имели в виду разные действия?   -  person Darin Dimitrov    schedule 22.09.2011
comment
Пример: Пользователь может иметь разрешение на создание 14-летнего человека. Чтобы было ясно, мой вопрос заключается не в том, чтобы решить рассматриваемую проблему, а в том, как решать проблему архитектуры MVC.   -  person iuristona    schedule 22.09.2011


Ответы (3)


Вы можете использовать интерфейс IValidatableObject и определить собственные правила проверки.

Смотрите мой ответ по адресу:

Использование аннотаций данных для сделать поле обязательным при поиске другого в форме mvc 3

Обычно это просто вопрос реализации интерфейса и определения того, когда применять ваши правила.

person Adam Tuliper - MSFT    schedule 22.09.2011

Я только что понял решение для этого случая.

Например. Пользователь может иметь разрешение на создание 14-летнего человека.

Перед сохранением модели мы можем вызвать DataContext.GetValidationErrors() и сделать вывод, является ли единственная проверка ошибок, которую мы хотим отключить, а затем установить

DataContext.Configuration.ValidateOnSaveEnabled = false;

Таким образом, мы можем сохранить модель.

person iuristona    schedule 11.09.2012

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

Вы можете добавить класс для работы с валидаторами, следуя моему ответу на этот вопрос.

person counsellorben    schedule 22.09.2011