Usuário com melhor resposta
ValidationExtensions com 2 campos

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- Movido Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee quarta-feira, 20 de junho de 2012 16:04 (De:.NET Framework - ADO (Acesso a dados, data access & storage))
Respostas
-
Você poderia fazer assim:
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-2public 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"); } }
http://www.linkedin.com/pub/murilo-kunze/44/191/455
- Sugerido como Resposta Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee quarta-feira, 20 de junho de 2012 16:41
- Editado Murilo Kunze quarta-feira, 20 de junho de 2012 16:48
- Marcado como Resposta Marlon Tiedt sexta-feira, 22 de junho de 2012 16:36
-
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
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 -
Você poderia fazer assim:
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-2public 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"); } }
http://www.linkedin.com/pub/murilo-kunze/44/191/455
- Sugerido como Resposta Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee quarta-feira, 20 de junho de 2012 16:41
- Editado Murilo Kunze quarta-feira, 20 de junho de 2012 16:48
- Marcado como Resposta Marlon Tiedt sexta-feira, 22 de junho de 2012 16:36
-
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