C# FluentValidation和嵌套验证程序

C# FluentValidation和嵌套验证程序,c#,validation,fluentvalidation,C#,Validation,Fluentvalidation,我有一门课: public class ClientInfo { public string LabAccount { get; set; } //.... } 和验证程序类: public class ClientInfoFluentValidator : AbstractValidator<ClientInfo> { public ClientInfoFluentValidator() { RuleFor(d => d.La

我有一门课:

public class ClientInfo
{
    public string LabAccount { get; set; }
    //....
}
和验证程序类:

public class ClientInfoFluentValidator : AbstractValidator<ClientInfo>
{
    public ClientInfoFluentValidator()
    {
        RuleFor(d => d.LabAccount)
            .NotEmpty()
            .WithMessage("LabAccount is required");

        RuleFor(d => d.LabAccount)
            .Length(8)
            .WithMessage("LabAccount is limited by 8 letters");
        //....
    }
}
public class OrderFluentValidator : AbstractValidator<Order>
{
    public OrderFluentValidator()
    {
        //...
        RuleFor(d => d.ClientInfo)
            .NotNull()
            .WithMessage("ClientInfo part is required");

        RuleFor(d => d.ClientInfo)
            .SetValidator(new ClientInfoFluentValidator());
    }
}
和验证程序类:

public class ClientInfoFluentValidator : AbstractValidator<ClientInfo>
{
    public ClientInfoFluentValidator()
    {
        RuleFor(d => d.LabAccount)
            .NotEmpty()
            .WithMessage("LabAccount is required");

        RuleFor(d => d.LabAccount)
            .Length(8)
            .WithMessage("LabAccount is limited by 8 letters");
        //....
    }
}
public class OrderFluentValidator : AbstractValidator<Order>
{
    public OrderFluentValidator()
    {
        //...
        RuleFor(d => d.ClientInfo)
            .NotNull()
            .WithMessage("ClientInfo part is required");

        RuleFor(d => d.ClientInfo)
            .SetValidator(new ClientInfoFluentValidator());
    }
}
但当我尝试验证
顺序时
类:

    OrderFluentValidator validator = new OrderFluentValidator();
    [TestMethod]
    public void OrderInfoValid()
    {
        Order model = new Order
        {
            ClientInfo = new ClientInfo
            {
                LabAccount = "1234567"
                //....
            },
            //....
        };

        validator.ShouldHaveValidationErrorFor(d => d.ClientInfo, model);
    }

上面说,
model
类是有效的。为什么会这样?为什么
ClientInfo
验证程序不工作?

您需要在子视图模型上指定应该包含错误消息的确切属性。这似乎是断言的问题,而不是视图模型或验证器的问题:

validator.shouldlhavevalidationerror(d=>d.ClientInfo.LabAccount,model);

我也遇到了这个问题。调用“Validate”似乎只验证该视图模型,而不验证其任何子模型。我还没有找到一种方法来在一次“验证”调用中验证视图模型的层次结构。类似的问题:。