这些是我的规则:
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无效。
答案 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"]);