FluentValidation,多个条件不适用于一条规则

时间:2019-02-15 04:43:50

标签: c# fluentvalidation

这些是我的规则:

public class CambiarPasswordViewModelValidator : AbstractValidator<CambiarPasswordViewModel>
{
    public CambiarPasswordViewModelValidator(
        IStringLocalizer<CambiarPasswordViewModelValidator> localizer,
        IStringLocalizer<SharedLocalizer> sharedLocalizer)
    {
        RuleFor(c => c.ContraseñaActual)
            .NotEmpty().WithMessage(sharedLocalizer["Requerido *"]);
        RuleFor(c => c.ContraseñaNueva)
            .NotEmpty().WithMessage(sharedLocalizer["Requerido *"])
            .Equal(c => c.ContraseñaConfirmacion)
                .When(c => !string.IsNullOrWhiteSpace(c.ContraseñaNueva))
                .WithMessage(localizer["Nueva Contraseña y Confirmación no concuerdan"]);
        RuleFor(c => c.ContraseñaConfirmacion)
            .NotEmpty().WithMessage(sharedLocalizer["Requerido *"]);
    }
}

我的问题是第二条规则未按预期工作。我需要ContraseñaNueva验证是否为空,以及何时值不等于ContraseñaConfirmacion,但是,在剃刀页面中仅将空验证注入到输入中。如果我更改顺序,则Equal验证有效,但NotEmpty无效。

1 个答案:

答案 0 :(得分:0)

将规则分开就足够了,

RuleFor(c => c.ContraseñaNueva)
    .NotEmpty().WithMessage(sharedLocalizer["Requerido *"]);

RuleFor(c => c.ContraseñaNueva)
    .Equal(c => c.ContraseñaConfirmacion)
    .When(c => !string.IsNullOrWhiteSpace(c.ContraseñaNueva))
    .WithMessage(localizer["Nueva Contraseña y Confirmación no concuerdan"]);