【问题标题】:Validation in ASP.NET MVC 2ASP.NET MVC 2 中的验证
【发布时间】:2010-09-30 11:22:08
【问题描述】:

我在使用 ASP.NET MVC 2 中的数据注释进行验证时遇到了一些问题。例如,我有 Address 类:

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; }
}

我想一直验证 Order.FirstAddress,但只有在 Order.RequireSecondAddress 设置为 true 时才应验证 Order.SecondAddress。

有什么想法吗? :)

克里斯

【问题讨论】:

    标签: c# validation asp.net-mvc-2 data-annotations


    【解决方案1】:

    使用数据注释几乎是不可能的,否则需要编写依赖反射等的丑陋代码......(我想你明白了)。

    我建议您查看FluentValidation。它有一个很好的integration with 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);
        }
    }
    

    您还将受益于拥有一个单独的验证层,也可以是unit tested in a very elegant way

    【讨论】:

    • 在 FluentValidator 中,客户端存在一些问题,验证更复杂,但我认为这不是一个大问题。现在我要了解有关 FluentValidator 的更多信息 :) 谢谢!
    【解决方案2】:

    【讨论】:

    • 谢谢!这就是我一直在寻找的。​​span>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多