Inquiridor
Problemas Data Annotations MVC 2

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
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
-
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
-
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