Как создать правило для нескольких полей одновременно, используя FluentValidation - PullRequest
0 голосов
/ 21 января 2020

Мне нужно проверить следующую ситуацию в проекте Asp. net MVC: если поля ServicoEmail, ServicoWebsite, ServicoBde, ServicoRedeSocial и ServicoMensagemInstantanea все ложные, вернуть сообщение об ошибке. Я пытался сделать, как показано ниже, но это не работает ... Кто-нибудь знает, как мне помочь?

RuleFor(ps => new { ps.ServicoEmail, ps.ServicoWebsite, ps.ServicoBlog, ps.ServicoRedeSocial, ps.ServicoMensagemInstantanea })
    .Must(ps=> ps.ServicoEmail == false && ps.ServicoWebsite == false && ps.ServicoBlog == false && ps.ServicoRedeSocial == false && ps.ServicoMensagemInstantanea == false)
    .WithMessage("É necessário selecionar pelo menos um Tipo de Serviço.");

Мой класс:

public abstract class ServicoWebCommand : Command
{
    public int Id { get; protected set; }

    public string Descricao { get; protected set; }

    public string FormatoCampo { get; protected set; }

    public bool ServicoEmail { get; protected set; }

    public bool ServicoWebsite { get; protected set; }

    public bool ServicoBlog { get; protected set; }

    public bool ServicoRedeSocial { get; protected set; }

    public bool ServicoMensagemInstantanea { get; protected set; }

    public bool PadraoSistema { get; protected set; }
}

1 Ответ

0 голосов
/ 21 января 2020

Вам нужно указать каждый из них по отдельности, или вы можете указать собственный валидатор.

Путь 1:

RuleFor(ps => ps).SetValidator(new ServicoValidator());

, а затем написать реализацию Validator:

public class ServicoValidator: AbstractValidator<ServicoWebCommand>
{
    public ServicoValidator()
    {
        RuleFor(t => t).Custom(ValidateServico);
    }


    private void ValidateServico(ServicoWebCommand ps, CustomContext validationContext)
    {
        if(ps.ServicoEmail == false && 
           ps.ServicoWebsite == false && 
           ps.ServicoBlog == false && 
           ps.ServicoRedeSocial == false && 
           ps.ServicoMensagemInstantanea == false)
         {
           validationContext.AddFailure("É necessário selecionar pelo menos um Tipo de Serviço.");
         }
    }
}

Путь 2:

RuleFor(ps => ps).Must(ps => Validate(ps));

и напишите метод для проверки как:

private bool Validate(ServicoWebCommand ps)
{
    if(ps.ServicoEmail == false && 
       ps.ServicoWebsite == false && 
       ps.ServicoBlog == false && 
       ps.ServicoRedeSocial == false && 
       ps.ServicoMensagemInstantanea == false) 
        return false;

    return true;
}
...