Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC 2中的验证_C#_Validation_Asp.net Mvc 2_Data Annotations - Fatal编程技术网

C# ASP.NET MVC 2中的验证

C# ASP.NET MVC 2中的验证,c#,validation,asp.net-mvc-2,data-annotations,C#,Validation,Asp.net Mvc 2,Data Annotations,我在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

我在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

有什么想法吗?:)


Chris

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

我建议你看一下这本书。它有一个好主意。下面是您的验证逻辑的样子:

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

公共类AddressValidator:AbstractValidator。

以下条件验证文章可能会有所帮助:


谢谢!这正是我一直在寻找的。在FluentValidator中,客户端存在一些更复杂的验证问题,但我认为这不是一个大问题。现在我要学习更多关于FluentValidator的知识:)谢谢!