none
ValidationExtensions com 2 campos RRS feed

  • Pergunta

  • Olá, não sei se postei no fórum correto, mas qualquer coisa passem para o outro.

    Tenho um campo na minha classe para salvar tanto o CPF como o CNPJ.
    Na view tem um campo que é informado o tipo de pessoa, "Fisica" ou "Juridica", e depois informa o CPF ou CNPJ. Como eu posso fazer um Validation Extensions com este dois campos?

    Abs..


    Marlon Tiedt
    www.sesmt.com.br

    quarta-feira, 20 de junho de 2012 14:39

Respostas

  • Você poderia fazer assim:

    public class Pessoa : IValidatableObject { public int Tipo { get; set; } public string CpfCnpj{get;set;}

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {

    //se for cpf invalido yield return new ValidationResult("cpf inválido");

    //else cnpj inválido

    yield return new ValidationResult("cnpj inválido"); } }

    Achei esse link caso precise realmente criar com data annotations: http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-2


    http://www.linkedin.com/pub/murilo-kunze/44/191/455


    quarta-feira, 20 de junho de 2012 16:40
  • Seguindo as dicas, fiz  a implementação desta maneira. Acho que assim posso ajudar mais alguém.
    Explicando o código:

    * propertyValue - É um registro que vem do banco de dados. Neste caso para mim 2, indica pessoa jurídica. A validação foi adicionada no campo sexo, aonde 3 indica não aplicavél. Agora estou tentando pegar os dados de texto para comparar e não por código.

    Se alguém quiser o exemplo inteiro pedi ai que eu posto.

    Abs

    [AttributeUsageAttribute(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
            public class CompareValuesAttribute : ValidationAttribute
            {
                public string OtherProperty { get; set; }                        
    
                public CompareValuesAttribute(string otherProperty)
                {
                    if (otherProperty == null)
                        throw new ArgumentNullException("otherProperty");
                    OtherProperty = otherProperty;                
                }
    
                protected override ValidationResult IsValid(object value, ValidationContext validationContext)
                {
                    var property = validationContext.ObjectInstance.GetType().GetProperty(OtherProperty);
    
                    if (property == null)
                        return new ValidationResult(String.Format("Unknown property: {0}.", OtherProperty));
                                    
                    var propertyValue = property.GetValue(validationContext.ObjectInstance, null);
    
                    /* Tipo de pessoa 2 - é pessoa juridicia */
                    if (Convert.ToInt32(propertyValue) == 2) 
                    {
                        if (Convert.ToInt32(value) != 3)
                            return new ValidationResult("Tipo de pessoa 'Juridíca', deve possuir ");
                    }
    
                    return ValidationResult.Success;        
                }
            }





    Marlon Tiedt
    www.sesmt.com.br


    • Editado Marlon Tiedt quarta-feira, 20 de junho de 2012 20:58
    • Marcado como Resposta Marlon Tiedt sexta-feira, 22 de junho de 2012 16:36
    quarta-feira, 20 de junho de 2012 20:58

Todas as Respostas

  • Migrando para o fórum de ASP.Net MVC.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    quarta-feira, 20 de junho de 2012 16:04
  • Você poderia fazer assim:

    public class Pessoa : IValidatableObject { public int Tipo { get; set; } public string CpfCnpj{get;set;}

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {

    //se for cpf invalido yield return new ValidationResult("cpf inválido");

    //else cnpj inválido

    yield return new ValidationResult("cnpj inválido"); } }

    Achei esse link caso precise realmente criar com data annotations: http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-2


    http://www.linkedin.com/pub/murilo-kunze/44/191/455


    quarta-feira, 20 de junho de 2012 16:40
  • Seguindo as dicas, fiz  a implementação desta maneira. Acho que assim posso ajudar mais alguém.
    Explicando o código:

    * propertyValue - É um registro que vem do banco de dados. Neste caso para mim 2, indica pessoa jurídica. A validação foi adicionada no campo sexo, aonde 3 indica não aplicavél. Agora estou tentando pegar os dados de texto para comparar e não por código.

    Se alguém quiser o exemplo inteiro pedi ai que eu posto.

    Abs

    [AttributeUsageAttribute(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
            public class CompareValuesAttribute : ValidationAttribute
            {
                public string OtherProperty { get; set; }                        
    
                public CompareValuesAttribute(string otherProperty)
                {
                    if (otherProperty == null)
                        throw new ArgumentNullException("otherProperty");
                    OtherProperty = otherProperty;                
                }
    
                protected override ValidationResult IsValid(object value, ValidationContext validationContext)
                {
                    var property = validationContext.ObjectInstance.GetType().GetProperty(OtherProperty);
    
                    if (property == null)
                        return new ValidationResult(String.Format("Unknown property: {0}.", OtherProperty));
                                    
                    var propertyValue = property.GetValue(validationContext.ObjectInstance, null);
    
                    /* Tipo de pessoa 2 - é pessoa juridicia */
                    if (Convert.ToInt32(propertyValue) == 2) 
                    {
                        if (Convert.ToInt32(value) != 3)
                            return new ValidationResult("Tipo de pessoa 'Juridíca', deve possuir ");
                    }
    
                    return ValidationResult.Success;        
                }
            }





    Marlon Tiedt
    www.sesmt.com.br


    • Editado Marlon Tiedt quarta-feira, 20 de junho de 2012 20:58
    • Marcado como Resposta Marlon Tiedt sexta-feira, 22 de junho de 2012 16:36
    quarta-feira, 20 de junho de 2012 20:58