Предпочтительный метод для добавления параметров проверки динамической модели в ASP.Net MVC2 - PullRequest
2 голосов
/ 29 апреля 2010

скажем, у меня есть модель с датой оплаты

public class PaymentModel
{
    [PaymentDateValid]
    public DateTime PaymentDate { get; set; }
}

Я создал специальный валидатор PaymentDateValid, полученный из ValidationAttribute. Валидатор должен найти в базе данных самую последнюю дату платежа и убедиться, что отправленная дата платежа находится после последней даты платежа.

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

Каков наилучший способ ввести эти параметры динамической проверки в валидатор? Или есть лучший способ выполнить проверку данных?

1 Ответ

1 голос
/ 29 апреля 2010

Для динамического добавления атрибутов проверки во время выполнения вам необходимо создать пользовательский ModelValidatorProvider :

public class MyCustomModelValidatorProvider : DataAnnotationsModelValidatorProvider
{
    protected override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable<Attribute> attributes)
    {   
        var newAttributes = attributes;

        //or whatever other criteria you need
        if( metadata.PropertyName == "PaymentDate" )
                newAttributes.Add( new PaymentDateValidAttribute() );

        return base.GetValidators(metadata, context, newAttributes);
    }
}

Просто не забудьте зарегистрировать своего провайдера валидатора пользовательских моделей через global.asax.

ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(new MyCustomModelValidatorProvider());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...