Last active
August 23, 2021 08:47
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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