Обход проверки данных аннотации на ASP.NET MVC 2 - PullRequest
2 голосов
/ 04 августа 2010

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

Thaks!

Ответы [ 2 ]

1 голос
/ 04 августа 2010

Вы можете использовать FluentValidation, который использует в качестве внешнего класса валидатора.В этом случае вы должны реализовать разные классы валидаторов для каждого сценария.

http://fluentvalidation.codeplex.com/

Пример:

using FluentValidation;
public class CustomerValidator: AbstractValidator<Customer> {
    public CustomerValidator() {
        RuleFor(customer => customer.Surname).NotEmpty();
        RuleFor(customer => customer.Forename).NotEmpty()
            .WithMessage("Please specify a first name");
    }
}

public class CustomerValidator2: AbstractValidator<Customer> {
    public CustomerValidator() {
        RuleFor(customer => customer.Surname).NotEmpty();
    }
}

Customer customer = new Customer();

CustomerValidator validator = new CustomerValidator();
ValidationResult results = validator.Validate(customer);

CustomerValidator2 validator2 = new CustomerValidator2();
ValidationResult results2 = validator2.Validate(customer);

results would have 2 validation errors
results2 would have 1 validation error for the same customer
1 голос
/ 04 августа 2010

Я не верю, что это возможно с аннотациями данных.Я знаю, что в блоке приложения проверки Microsoft Enterprise Library есть понятие наборов правил для группировки проверок.Это позволяет проверять объект в нескольких наборах правил, например в наборе правил по умолчанию и на некоторых страницах в расширенном наборе правил.Аннотации данных не имеют ничего общего с наборами правил.

Вот пример использования VAB:

public class Subscriber
{
    [NotNullValidator]
    [StringLengthValidator(1,200)]
    public string Name { get; set; }

    [NotNullValidator(Ruleset="Persistence")]
    [EmailAddressValidator]
    public string EmailAddress { get; set; }
}
...