Usuário com melhor resposta
Pegar propriedades do DataAnnotations pelo ModelState

Pergunta
-
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
-
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
Todas as Respostas
-
-
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?
absMarlon Tiedt
www.sesmt.com.br -
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
-
Ou faz assim
<Required(ErrorMessage:="«"), StringLength(150, ErrorMessage:="Este campo pode ter no máximo 150 caractéres")>
- Sugerido como Resposta Priscila Mayumi Sato terça-feira, 23 de outubro de 2012 17:03
-
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
-
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?