簡體   English   中英

FluentValidation 和嵌套驗證器

[英]FluentValidation and nested validator

我有一堂課:

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");
        //....
    }
}

然后我有類,它有ClientInfo類作為屬性:

public class Order
{
    public ClientInfo ClientInfo { get; set; }
    //....
}

和驗證器類:

public class OrderFluentValidator : AbstractValidator<Order>
{
    public OrderFluentValidator()
    {
        //...
        RuleFor(d => d.ClientInfo)
            .NotNull()
            .WithMessage("ClientInfo part is required");

        RuleFor(d => d.ClientInfo)
            .SetValidator(new ClientInfoFluentValidator());
    }
}

當我嘗試僅驗證ClientInfo它可以工作:

    ClientInfoFluentValidator validator = new ClientInfoFluentValidator();
    [TestMethod]
    public void ClientInfoInvalidLabAccountLength()
    {
        ClientInfo model = new ClientInfo
        {
            LabAccount = "1234567"
            //....
        };

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

但是當我嘗試驗證Order類時:

    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.ShouldHaveValidationErrorFor(d => d.ClientInfo.LabAccount, model);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM