none
Pegar propriedades do DataAnnotations pelo ModelState RRS feed

  • Pergunta

  • Olá pessoa, tem alguma maneira em uma action pegar as propriedades do DataAnnotations de um elemento da classe?

    Abs

    Marlon Tiedt
    www.sesmt.com.br

    terça-feira, 23 de outubro de 2012 00:40

Respostas

  • Vê se isso ajuda:

            public class Teste : Attribute
            {
                public string Error = "erro";
            }
    
            public class Pessoa
            {
                [Teste]
                public string Name { get; set; }
            }
    
            static void Main(string[] args)
            {
                var pessoa = new Pessoa()
                {
                    Name = "nome da pessoa"
                };
    
                var properties = pessoa.GetType().GetProperties();
                foreach (var property in properties)
                {
                    foreach (Attribute attribute in property.GetCustomAttributes(true))
                    {
                        if (attribute is Teste)
                            Console.WriteLine(((Teste)attribute).Error);
                    }
                }
            }

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

    • Marcado como Resposta Marlon Tiedt terça-feira, 23 de outubro de 2012 17:08
    terça-feira, 23 de outubro de 2012 10:32
  • Olá, 

    Murilo o que você postou ajudou para achar a solução...
    Abaixo as formas de fazer e pegar os dados do DataAnnotations. 

    Detalhe, se o Atribute não existir, o array de resultado, retorna 0 (zero), ou seja, quando tem a propriedade será sempre maior que 0 (zero).

    abs

    var teste = model.GetType().GetProperty("Email").GetCustomAttributes(true);
    var teste1 = model.GetType().GetProperty("Email").GetCustomAttributes(typeof(DisplayAttribute), true);
    var teste2 = model.GetType().GetProperty("Email").GetCustomAttributes(typeof(ERP.Helpers.Validacoes.Obrigatorio), true);
    var teste3 = model.GetType().GetProperty("Email").GetCustomAttributes(typeof(RequiredAttribute), true);
    
    var teste4 = model.GetType().GetProperty("Matricula").GetCustomAttributes(typeof(DisplayAttribute), true);
    var teste5 = model.GetType().GetProperty("Matricula").GetCustomAttributes(typeof(ERP.Helpers.Validacoes.Obrigatorio), true);
    var teste6 = model.GetType().GetProperty("Matricula").GetCustomAttributes(typeof(RequiredAttribute), true);
    
    var teste7 = model.GetType().GetProperty("Nome").GetCustomAttributes(typeof(RequiredAttribute), true);




    Marlon Tiedt
    www.sesmt.com.br


    • Marcado como Resposta Marlon Tiedt terça-feira, 23 de outubro de 2012 17:08
    • Editado Marlon Tiedt terça-feira, 23 de outubro de 2012 17:10
    terça-feira, 23 de outubro de 2012 17:08

Todas as Respostas

  • Como assim?

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

    terça-feira, 23 de outubro de 2012 01:42
  • Murilo, o detalhe é o seguinte.

    Se eu colocar [Required], no atributo da classe, ele pega o nome do [Display Name], e usa para colocar que o campo é obrigatório. Porém quero somente colocar "*", pois assim posso deixar no lado do label, e para ValidationSummary quero passar uma mensagem detalhada, dizendo "Campo tal é obrigatório e precisa ser maior que 10" e por ai vai.

    Eu vi que no ModelState, tenho os erros de validação e tenho os Key, que são os atributos da classe.
    Porém, como pegar as propriedades DataAnnotations de um atributo qualquer de uma classe qualquer.

    Melhorou?

    abs


    Marlon Tiedt
    www.sesmt.com.br

    terça-feira, 23 de outubro de 2012 10:14
  • Vê se isso ajuda:

            public class Teste : Attribute
            {
                public string Error = "erro";
            }
    
            public class Pessoa
            {
                [Teste]
                public string Name { get; set; }
            }
    
            static void Main(string[] args)
            {
                var pessoa = new Pessoa()
                {
                    Name = "nome da pessoa"
                };
    
                var properties = pessoa.GetType().GetProperties();
                foreach (var property in properties)
                {
                    foreach (Attribute attribute in property.GetCustomAttributes(true))
                    {
                        if (attribute is Teste)
                            Console.WriteLine(((Teste)attribute).Error);
                    }
                }
            }

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

    • Marcado como Resposta Marlon Tiedt terça-feira, 23 de outubro de 2012 17:08
    terça-feira, 23 de outubro de 2012 10:32
  • Ou faz assim

    <Required(ErrorMessage:="«"), StringLength(150, ErrorMessage:="Este campo pode ter no máximo 150 caractéres")>

    terça-feira, 23 de outubro de 2012 11:16
  • Olá, 

    Murilo o que você postou ajudou para achar a solução...
    Abaixo as formas de fazer e pegar os dados do DataAnnotations. 

    Detalhe, se o Atribute não existir, o array de resultado, retorna 0 (zero), ou seja, quando tem a propriedade será sempre maior que 0 (zero).

    abs

    var teste = model.GetType().GetProperty("Email").GetCustomAttributes(true);
    var teste1 = model.GetType().GetProperty("Email").GetCustomAttributes(typeof(DisplayAttribute), true);
    var teste2 = model.GetType().GetProperty("Email").GetCustomAttributes(typeof(ERP.Helpers.Validacoes.Obrigatorio), true);
    var teste3 = model.GetType().GetProperty("Email").GetCustomAttributes(typeof(RequiredAttribute), true);
    
    var teste4 = model.GetType().GetProperty("Matricula").GetCustomAttributes(typeof(DisplayAttribute), true);
    var teste5 = model.GetType().GetProperty("Matricula").GetCustomAttributes(typeof(ERP.Helpers.Validacoes.Obrigatorio), true);
    var teste6 = model.GetType().GetProperty("Matricula").GetCustomAttributes(typeof(RequiredAttribute), true);
    
    var teste7 = model.GetType().GetProperty("Nome").GetCustomAttributes(typeof(RequiredAttribute), true);




    Marlon Tiedt
    www.sesmt.com.br


    • Marcado como Resposta Marlon Tiedt terça-feira, 23 de outubro de 2012 17:08
    • Editado Marlon Tiedt terça-feira, 23 de outubro de 2012 17:10
    terça-feira, 23 de outubro de 2012 17:08
  • Olá galera, estava lendo este post

    e vii que quase o que estou precisando

    quando faço essa implementação:

    var teste = model.GetType().GetProperty("tabela");

    ele me retorna uma propriedade, é isso?

    mais como faço para pegar o objeto,

    criar um instância de objeto pegando pela propriedade,

    ou pelo menos pegar o type da propriedade retorna pela linha acima?


    terça-feira, 6 de novembro de 2012 17:53