none
VALIDAÇÃO NO DATAANNOTATIONS - UMA DÚVIDA RRS feed

  • Pergunta

  • Boa tarde,

    Estou criando um formulário de contato para um site que estou construindo para mim, e como é de praxe tenho que validar os campos.

    Um dos campos é um DropDowListFor que é populado na VIEW da seguinte forma:

        //Populando drop-down com lista de assuntos de e-mail de contato
        List<string> tiposAssuntos = new List<string>();
        tiposAssuntos.Add("Selecione uma opção");
        tiposAssuntos.Add("Cadastro de usuário");
        tiposAssuntos.Add("Crítica ou reclamação");
        tiposAssuntos.Add("Elogio");
        tiposAssuntos.Add("Sugestão");
        tiposAssuntos.Add("Problema com Fornecedor de produtos");
        tiposAssuntos.Add("Problema com Prestador de serviços");
        tiposAssuntos.Add("Outros");

    A model está assim:

    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;
    
    namespace Teste.Models
    {
        public class ContatoModel
        {
            [Required(ErrorMessage = "* Informe seu Nome")]
            [StringLength(51)]
            [DisplayName("Nome: ")]
            public string NomePContato { get; set; }
            [Required(ErrorMessage = "* Informe seu E-mail de contato")]
            [DataType(DataType.EmailAddress)]
            [DisplayName("E-mail: ")]
            public string EmailPContato { get; set; }
            [Required(ErrorMessage = "* Informe o Assunto que deseja tratar conosco")]
            [DisplayName("Assunto: ")]
            public string AssuntoPContato { get; set; }
            [Required(ErrorMessage = "* Digite sua Mensagem")]
            [StringLength(5000)]
            [DataType(DataType.MultilineText)]
            [DisplayName("Mensagem: ")]
            public string MensagemPContato { get; set; }
        }
    
    } 

    Como pode ser visto, estou usando o DataAnnotations para validar cada campo da model.

    Meu problema é que não estou conseguindo validar o DropDownListFor pois a primeira opção que aparece para o usuário é "Selecione uma opção" e acredito quando o usuário submete o form, o atributo de validação [Required] considera o campo já preenchido e deixa passar mesmo com o texto "Selecione uma opção".

    Gostaria de saber como posso neste caso, com o DataAnnotations, validar o conteúdo do DropDownListFor de forma que se a mensagem for "Selecione uma opção", ele dê a mensagem de erro requerendo a seleção de uma outra opção.

    Alguém aí poderia me ajudar?

    Agradeço desde já!

     

     



    sexta-feira, 29 de agosto de 2014 18:01

Todas as Respostas

  • Tenta assim

    EstadoSelecionado é um tipo Int Nullable "int?" e aqui deve ter o DataAnnotations para tornar o valor obrigatório.

    Estados é uma lista com estados sendo que o "Selecione uma opção" o Id deve ser null.

    @Html.DropDownListFor(m => m.EstadoSelecionado, new SelectList(Model.Estados, "Id", "Sigla"), new { @class = "form-control" })

    sexta-feira, 29 de agosto de 2014 19:01
  • Olá, boa tarde.

    Com a ajuda de um amigo, resolvi o problema da seguinte forma:

    Na Model:

            [Required(ErrorMessage = "* Informe o Assunto que deseja tratar conosco")]
            [DisplayName("Assunto: ")]
            public int AssuntoPContato { get; set; }
            public List<SelectListItem> ListagemAssuntos {get; set; }

    No Controller:

            public ActionResult Contato()
            {
                List<SelectListItem> listAssuntos = new List<SelectListItem>();
                listAssuntos.Add(new SelectListItem { Text = "Selecione uma opção", Value = ""});
                listAssuntos.Add(new SelectListItem { Text = "Cadastro de usuário", Value = "1" });
                listAssuntos.Add(new SelectListItem { Text = "Crítica ou reclamação", Value = "2" });
                listAssuntos.Add(new SelectListItem { Text = "Elogio", Value = "3" });
                listAssuntos.Add(new SelectListItem { Text = "Sugestão", Value = "4" });
                listAssuntos.Add(new SelectListItem { Text = "Problema com Fornecedor de produtos", Value = "5" });
                listAssuntos.Add(new SelectListItem { Text = "Problema com Prestador de serviços", Value = "6" });
                listAssuntos.Add(new SelectListItem { Text = "Outros", Value = "7" });
                listAssuntos.Add(new SelectListItem { Text = "Aplicativo ", Value = "8" });
    
                ContatoModel lista = new ContatoModel();
                lista.ListagemAssuntos = listAssuntos;
    
                return View(lista);
            }

    E finalmente na View:

                <div id="campo_assunto" class="">
                    @Html.DropDownList("AssuntoPContato", Model.ListagemAssuntos , new { @tabindex = "3" })
                </div>
                <div id="msg_val_4"><h4>@Html.ValidationMessageFor(m => m.AssuntoPContato)</h4></div> 

    Bom, é isso. Funcionou perfeitamente.

    Lembrando que estou usando a arquitetura MVC.

    Agradeço aos que tentaram me ajudar.

    Até mais!



    terça-feira, 2 de setembro de 2014 20:17