FluentValidation,如何在子验证器异常消息中包含父属性名称

时间:2015-09-02 11:25:17

标签: c# fluentvalidation fluentvalidation-2.0

RuleFor(getEligibleShippingDetails => getEligibleShippingDetails.ShipFromAddress)
 .NotNull()
 .WithMessage("Ship from address is required.")
 .SetValidator(shippingFromAddressValidator.FluentValidator)

我得到的例外是

例外:无效的获取符合条件的送货服务请求。 '电子邮件'不能为空。 电子邮件地址是必需的。

该消息不包括它实际上是对ShipFromAddress属性的验证。

当然,我可以将参考消息传递给子验证器,例如“从地址发货”,但是,也许有一种更优雅的方式来做。

尝试过类似的事情,

RuleFor(getEligibleShippingDetails => getEligibleShippingDetails.ShipFromAddress)
.NotNull()
.WithMessage("Ship from address is required.")
.SetValidator(shippingFromAddressValidator.FluentValidator)
.WithMessage("Invalid ship from address.")

但是最后一条消息被忽略了。

任何建议。

1 个答案:

答案 0 :(得分:0)

子模型应该引用父模型,因为FlueentValidation中没有用于此目的的特殊方法:

public class Parent
{
    public int Id {get;set;}
    public Child ChildModel {get;set;}
}

public class Child
{
    public string Name {get;set;}
    public Parent ParentModel {get;set;}
}

public class ChildValidator : AbstractValidator<Child>
{
    public ChildValidator()
    {
        RuleFor(x => x.Name)
            .NotNull()
            .WithMessage("Name should not be null for child of {0}'s parent", (model, value) => model.Parent.Id)
    }
}

如果您使用MVC - 只需实现ModelBinder,那将设置child的Parent属性。