2
respostas

Validação do modelo (ModelState.IsValid)

Existe outra maneira de validar meu modelo a não ser essa? Dá um certo trabalho receber o "Model" e transformar ele em uma "Entidade" visto que utilizo o Entity Framework.

    [HttpPost]
        public ActionResult Adicionar(CadMunicipioModel municipioModel)
        {
            if (ModelState.IsValid)
            {
                CadMunicipio municipio = new CadMunicipio();

                municipio.Id = municipioModel.Id;
                municipio.Descricao = municipioModel.Descricao;
                municipio.Status = municipioModel.Status;

                municipioDAO.Adiciona(municipio);
                return RedirectToAction("Form");
            }
            else
            {
                IList<CadMunicipio> municipios = municipioDAO.Lista();
                ViewBag.CadMunicipios = municipios;
                return View("Form");
            }

        }
2 respostas

Olá Osvalcir,

para se aproveitar das anotações de validação e de todo o processo de mandar as mensagens para a view, precisa de fato receber o modelo como parâmetro do controller e trabalhar com o ModelState.IsValid.

Uma coisa que tem no .net que facilita um pouco o trabalho de conversão de uma entidade de View para uma entidade de banco (como converter CadMunicipioModel para o CadMunicipio) são os Auto Mapper. Você faz uma configuração bem simples de como o .net pode transformar um modelo no outro e se ambas as classes tem propriedades com o mesmo nome ele já consegue assumir isso pra você automaticamente. Tem este link aqui com um tutorial em português de como ele fazer esta configuração http://www.eduardopires.net.br/2013/08/asp-net-mvc-utilizando-automapper-com-view-model-pattern/

Deu certo aqui com o AutoMapper Lucas, ficou assim...

if (ModelState.IsValid)
            {
                CadMunicipio municipio = new CadMunicipio();
                //Antes (Código no braço)
                //municipio.Id = municipioModel.Id;
                //municipio.Descricao = municipioModel.Descricao;
                //municipio.Status = municipioModel.Status;

                //Depois (AutoMapper)
                municipio = Mapper.Map<CadMunicipioModel, CadMunicipio>(municipioModel);

                municipioDAO.Adiciona(municipio);
                return RedirectToAction("Form");
            }

Só teve algumas modificações nas classes que fazem o controle do mapeamento na versão mais nova do AM, caso alguém precise posso colocar um passo a passo para utilizar esse recurso que poupa muito código no "braço". obrigado pela dica!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software