none
IsValid do RequiredAttribute RRS feed

  • Pergunta

  • Olá tem como pegar via código, se o atributo qualquer da classe usando DataAnnotations tem os ValidationAttribute, se ele está valido ou não...

    Estou com este código, que identifica se tem o RequiredAttribute, mas não sei se é valido ou não:

    public static string MensagemValidacao(object instance)
    {   
      var retorno = "";    
      foreach (var property in instance.GetType().GetProperties())
      {                      
        foreach (var attribute in instance.GetType().GetProperty(property.Name.ToString()).GetCustomAttributes(false))
        {
          if (attribute is RequiredAttribute) 
          {
            // Aqui queria fazer if se RequiredAttribute é valido ou não
            retorno = retorno + "Campo '" + property.Name.ToString() + "' deve ser preenchido";
          }
        }
      }
    }

    abs

    Marlon Tiedt
    www.sesmt.com.br

    quarta-feira, 24 de outubro de 2012 15:03

Todas as Respostas

  • Tenta isso dentro do if:

    ((RequiredAttribute)(attribute)).IsValid(instance);
    Mas porquê você está fazendo tudo isso? Não acha mais fácil deixar o ModelState tratar?


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

    • Sugerido como Resposta Vitor Mendes quarta-feira, 24 de outubro de 2012 15:22
    quarta-feira, 24 de outubro de 2012 15:13
  • Já tinha tentado isto...Sempre retornar true.

    Estou fazendo isto, pois no ErrorMesage do Required somente vou colocar "*", e quero passar uma mensagem completa ao usuário usando o DisplayName.
    Mas acho que será mais fácil passar o ModelState e usar as duas variaveis.

    Ou tem um jeito mais fácil para isto?

    Abs

    Marlon Tiedt
    www.sesmt.com.br

    quarta-feira, 24 de outubro de 2012 15:33
  • Acho que seria melhor você criar um data annotation que faça isso..

    Por exemplo:

    [MyRequired(ErrorMessage = "campo obrigatório")]
    public string Name{get;set;}


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

    quarta-feira, 24 de outubro de 2012 15:53
  • Murilo, o meu problema não é mostrar a mensagem, mas fazer um tratamento com ela.
    Exemplo:

    [Display(Name = "Nome da pessoa")]
    [Required(ErrorMessage = "*")]
    public string Nome { get; set; }

    Quando a pessoa for tentar fazer o cadastro e não informar nada no campo, e usando:

    @Html.ValidationMessageFor(m => m.Nome)

    Então o label vai ficar: Nome da pessoa *

    Porém quero fazer uma mensagem mais amigavel e no lado do label quero colocar o * ainda.
    Para isto, na view eu faço:

    <div class="linha">    
        @if (Html.ValidationSummary(true) != null)
        {
            @Html.Raw(Server.HtmlDecode(Html.ValidationSummary(true).ToString()));
        }
    </div>  
    E usando o ValidationSummary, quero mostrar "Campo "Nome da pessoa" é obrigatório". E não quero somente fazer isto para o Required.
    Assim, acho que ficará mais limpo os campos, e posso colocar um campo no lado do outro na view.

    abs

    Marlon Tiedt
    www.sesmt.com.br


    • Editado Marlon Tiedt quarta-feira, 24 de outubro de 2012 16:26
    quarta-feira, 24 de outubro de 2012 16:15