none
Problemas Data Annotations MVC 2 RRS feed

  • Pergunta

  • Olá para todos,

    Estou enfrentando o seguinte problema ao criar uma data annotation:

    Quando o valor inserido no campo é de um tipo diferente do modelo utilizado, ex: String em um Int32, o meu data annotation parece que é interceptado pelo validation padrão.

    O método até chega a ser acionado e “teoricamente” retorna uma mensagem ValidationResult.

    Mas ao retornar a View a mensagem de validação é aquela que vem padrão e em Inglês(The value 'sd' is not valid for Número.)

    Resumindo, o data annotation customizado só funciona desde que valor inserido seja o mesmo do modelo.

    Tem algum jeito de ignorar ou excluir essas mensagem e validações padrões?

    Att,

    Hygor
    quinta-feira, 22 de março de 2012 13:18

Todas as Respostas

  • Olá Hygor, no seu models onde vc tem a classe com seus campos, como está definido o Required ou StringLength?

    tente fazer algo assim:

     [StringLength(100, ErrorMessage = "Preenchimento Obrigátorio")]
     [Display(Name = "Nome")]
     public string Nome { get; set; }

    ou

    [Required(ErrorMessage = "Preenchimento Obrigátorio")]
    [Display(Name = "Nome")]
    public string Nome { get; set; }

    Assim ele vai pega msg que você está definindo e não vai mais aparece essa msg padrão em inglês!

    Abraço


    wescley.net > Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como resposta

    quinta-feira, 22 de março de 2012 18:41
  • Olá Wescley,

    No meu caso estou usando um data annotation customizado as classes estão assim...

    Modelo:

    public class Subestacao
        {
            public Int32 Id { get; set; }
    
            [ValidaCampoObrigatorio]
            public String Nome { get; set; }
            
            
        }

    Classe de validação e retorno da mensagem de erro:

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = true, Inherited = true)]

    public sealed class ValidaCampoObrigatorioAttribute : ValidationAttribute { private static string erro; public ValidaCampoObrigatorioAttribute() : base(erro) { } protected override ValidationResult IsValid(object valor,ValidationContext contexto) { if (valor != null) { return ValidationResult.Success; } else { return new ValidationResult("Esse campo é de preenchimento obrigatório"); } } }



    Esse é um caso que seria facilmente resolvido com o Required padrão e setando um ErrorMessage, mas eu preciso de validações customizadas.

    Mas agora meus problemas sao:

    Na classe de validação não consigo receber o ValidationContext e consequentemente não consigo pegar o nome da atributo para montar uma mensagem dinamica;

    Mesmo que eu retorne um ValidationResult com uma messagem de erro, esse mensagem não é apresentada na view e sim, a mensagem padrão.

    Obrigado,

    Hygor





    • Editado Hygor quinta-feira, 22 de março de 2012 19:08
    quinta-feira, 22 de março de 2012 19:05
  • Resolvi o problema no retorno de um errorMessage.

    Mas o objeto ValidationContext do método abaixo ainda está vindo null

    protected override ValidationResult IsValid(object valor,ValidationContext contexto)
            {
                
                if (valor != null)
                {
                    return ValidationResult.Success;
                }
                else
                {
                    return new ValidationResult("Esse campo é de preenchimento obrigatório");
                }
                
            }

    Com isso não consigo pegar o DispayName para personalizar a menssagem, e não quero ter que passa o nome do atributo como parametro.

    Att,

    Hygor

    sexta-feira, 23 de março de 2012 14:07