简体   繁体   English

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

[英]FluentValidation, Multiple conditions not working in one rule

These are my rules: 这些是我的规则:

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 *"]);
    }
}

My problem is second rule is not working as expected. 我的问题是第二条规则未按预期工作。 I need ContraseñaNueva validates when empty and also when value not equal to ContraseñaConfirmacion, however, only empty validation is injected to input in razor page. 我需要ContraseñaNueva验证是否为空,以及何时值不等于ContraseñaConfirmacion,但是,在剃刀页面中仅将空验证注入到输入中。 If I change the order, Equal validation works but NotEmpty doesn't. 如果我更改顺序,则等于验证有效,但非空无效。

it will be enough to separate the rules, 将规则分开就足够了,

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"]);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM