Проверка в ASP.NET MVC 2 - PullRequest
       15

Проверка в ASP.NET MVC 2

3 голосов
/ 30 сентября 2010

У меня есть некоторые проблемы с проверкой с использованием аннотаций данных в ASP.NET MVC 2. Например, у меня есть класс адреса:

public class Address
{
    public long Id { get; set; }

    [Required]
    public string City { get; set; }

    [Required]
    public string PostalCode { get; set; }

    [Required]
    public string Street { get; set; }
}

и класс заказа:

public class Order
{
    public long Id { get; set; }

    public Address FirstAddress { get; set; }

    public Address SecondAddress { get; set; }

    public bool RequireSecondAddress { get; set; }
}

Iхотите проверять Order.FirstAddress все время, но Order.SecondAddress следует проверять, только если для Order.RequireSecondAddress установлено значение true.

Есть идеи?:)

Крис

Ответы [ 2 ]

3 голосов
/ 30 сентября 2010

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

Я бы порекомендовал вам посмотреть FluentValidation . Он имеет хорошую интеграцию с ASP.NET MVC . Вот как может выглядеть ваша логика проверки:

public class AddressValidator : AbstractValidator<Address>
{
    public AddressValidator()
    {
        RuleFor(x => x.City)
            .NotEmpty();
        RuleFor(x => x.PostalCode)
            .NotEmpty();
        RuleFor(x => x.Street)
            .NotEmpty();
    }
}

public class OrderValidator : AbstractValidator<Order>
{
    public OrderValidator()
    {
        RuleFor(x => x.FirstAddress)
            .SetValidator(new AddressValidator());
        RuleFor(x => x.SecondAddress)
            .SetValidator(new AddressValidator())
            .When(x => x.RequireSecondAddress);
    }
}

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

1 голос
/ 30 сентября 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...