Skip to content

Instantly share code, notes, and snippets.

@guibranco
Last active August 23, 2021 08:47
Show Gist options
  • Save guibranco/8ee9636ae75e85c7d46ead415a4d22ae to your computer and use it in GitHub Desktop.
Save guibranco/8ee9636ae75e85c7d46ead415a4d22ae to your computer and use it in GitHub Desktop.
Exemplo de validação condicional em um model no MVC (C# - ASP.NET) utilizando IValidatableObject
namespace Facebook.GrupoASPNET.Exemplos.Models
{
public sealed class Person : IValidatableObject
{
[Display(Name = "Código")]
public Int32 PersonId {get;set;}
[Display(Name = "Tipo de pessoa")]
[Required(ErrorMessage="Informe o tipo de pessoa: Física/Jurídica")]
public PersonFiscalType FiscalType {get;set;}
[Display(Name = "CPF")]
[Required(ErrorMessage="Informe o seu CPF")]
public String PersonalDocument {get;set;}
[Display(Name = "CNPJ")]
public String CorporateDocument {get;set;}
[Display(Name = "Nome completo")]
[Required(ErrorMessage="Informe seu nome completo")]
public String FullName {get;set;}
[Display(Name = "Nome fantasia")]
public String FantasyName {get;set;}
[Display(Name = "Razão social")]
public String CorporateName {get;set;}
[Display(Name = "Telefone de contato")]
[Required(ErrorMessage="Informe um telefone de contato")]
public String PhoneNumber {get;set;}
[Display(Name = "Telefone de contato (corporativo)")]
public String CorporatePhoneNumber {get;set;}
//Esse método é executado automanticamente porque essa classe implementa a interface IValidatableObject
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
//Verifica se o tipo de pessoa é jurídica ou física, se for fisica já aborta a validação dos outros campos
if(FiscalType != PersonFiscalType.CORPORATE)
yield break;
//A partir daqui temos a certeza que o usuário informou que é pessoa jurídica, então precisamos validar os campos de PJ
//Valida o CNPJ
if(String.IsNullOrWhiteSpace(CorporateDocument))
yield return new ValidationResult("O campo CNPJ deve ser informado para pessoa jurídica");
//Valida o nome fantasia
if(String.IsNullOrWhiteSpace(FantasyName))
yield return new ValidationResult("O campo nome fantasia deve ser informado para pessoa jurídica");
//Valida a razão social
if(String.IsNullOrWhiteSpace(CorporateName))
yield return new ValidationResult("O campo razão social deve ser informado para pessoa jurídica");
//Valida o telefone de contato corporativo
if(String.IsNullOrWhiteSpace(CorporatePhoneNumber))
yield return new ValidationResult("O campo telefone de contato (corporativo) deve ser informado para pessoa jurídica");
/*
* Se tiver mais campos a serem validados para PJ, faça as validações aqui!
* Para reportar um erro, basta retornar uma nova instância de ValidationResult com a mensagem de erro!
* Como o return type do método é um IEnumerable não se esqueça de usar "yield" no return
*/
}
}
//Enumerador do tipo de pessoa para permitir o usuário selecionar apenas os tipos listados aqui.
//Em uma classe de utilidades/helpers crie um método que converta um enum para um dropdown e ai basta adicionar esse método na sua view!
public enum PersonFiscalType
{
//Física
INDIVIDUAL,
//Jurídica
CORPORATE
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment