ASP.NET MVC - Usar DropDownList e ViewModels

Olá, pessoal. Estou fazendo um pequeno “sistema” pra gestão de Petshops, como trabalho que vale minha nota. Nesse sistema, planejei usar vários DropDowns imaginando que fosse fácil fazer, mas já percebi que não é bem assim. Ou pelo menos não está sendo para mim :slight_smile:

Eu preciso puxar informações do banco, passar para o ViewModel e montar o DropDown a partir disso. Alguém tem alguma noção de uma maneira de fazer isso?

Minha classe ViewModel

using System;
using System.Collections;
using System.ComponentModel;

namespace CodePet.ViewModels
{
public class FuncionarioViewModels
{
public class ListaViewModel
{
public int IdFuncionario { get; set; }

        [DisplayName("Nome")]
        public string NomeFuncionario { get; set; }
        [DisplayName("Cargo")]
        public string CargoFuncionario { get; set; }
        [DisplayName("Matrícula")]
        public int MatriculaFuncionario { get; set; }
    }
    public class CadastrarFuncionarioViewModel
    {
        public int IdFuncionario { get; set; }
        [DisplayName("Matrícula:")]
        public int MatriculaFuncionario { get; set; }
        public int IdUsuarioFuncionario { get; set; }
        [DisplayName("Login:")]
        public string LoginUsuarioFuncionario { get; set; }
        [DisplayName("Senha:")]
        public string SenhaUsuarioFuncionario { get; set; }
        [DisplayName("Status:")]
        public bool AtivoUsuarioFuncionario { get; set; }
        public int IdPapelUsuarioFuncionario { get; set; }
        [DisplayName("Papel do Usuário")]
        public string NomePapelUsuarioFuncionario { get; set; }
        [DisplayName("Cargo:")]
        public int IdCargoFuncionario { get; set; }
        public string NomeCargoFuncionario { get; set; }
        [DisplayName("Salário:")]
        public decimal SalarioCargoFuncionario { get; set; }
        public int IdPessoaFuncionario { get; set; }
        [DisplayName("Nome:")]
        public string NomeFuncionario { get; set; }
        [DisplayName("Email:")]
        public string EmailFuncionario { get; set; }
        [DisplayName("Telefone:")]
        public string TelefoneFuncionario { get; set; }
        [DisplayName("CPF:")]
        public string CpfFuncionario { get; set; }
        [DisplayName("Data de Nascimento:")]
        public DateTime DataNascimentoFuncionario { get; set; }
        public int IdEnderecoFuncionario { get; set; }
        [DisplayName("Número:")]
        public int NumeroEnderecoFuncionario { get; set; }
        [DisplayName("Logradouro:")]
        public string LogradouroEnderecoFuncionario{ get; set; }
        [DisplayName("Complemento:")]
        public string ComplementoEnderecoFuncionario { get; set; }
        [DisplayName("CEP:")]
        public string CepEnderecoFuncionario { get; set; }
        [DisplayName("Bairro:")]
        public string BairroEnderecoFuncionario { get; set; }
        [DisplayName("Cidade:")]
        public string CidadeEnderecoFuncionario { get; set; }
        [DisplayName("UF:")]
        public int IdUF { get; set; }
    }
}

}

Meu classe Controller

private dbCodePet db = new dbCodePet();

    public ActionResult Index()
    {
        List<FuncionarioViewModels.ListaViewModel> myList = new List<FuncionarioViewModels.ListaViewModel>();
        foreach(var f in db.TbFuncionario.ToList())
        {
            var model = new FuncionarioViewModels.ListaViewModel();
            model.IdFuncionario = f.IdFuncionario;
            model.NomeFuncionario = f.TbPessoa.NomePessoa;
            model.CargoFuncionario = f.TbCargo.NomeCargo;
            model.MatriculaFuncionario = f.MatriculaFuncionario;
            myList.Add(model);
        }
        return View(myList);
    }
   public ActionResult Create()
    {
        var model = new FuncionarioViewModels.CadastrarFuncionarioViewModel();
        return View(model);
    }
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(FuncionarioViewModels.CadastrarFuncionarioViewModel model)
    {
        if (ModelState.IsValid)
        {
            var transaction = db.Database.BeginTransaction();
            try
            {
                // Insert na tabela endereço
                var enderecoFuncionario = new TbEndereco();
                enderecoFuncionario.NumeroEndereco = model.NumeroEnderecoFuncionario;
                enderecoFuncionario.LogradouroEndereco = model.LogradouroEnderecoFuncionario;
                enderecoFuncionario.ComplementoEndereco = model.ComplementoEnderecoFuncionario;
                enderecoFuncionario.CepEndereco = model.CepEnderecoFuncionario;
                enderecoFuncionario.BairroEndereco = model.BairroEnderecoFuncionario;
                enderecoFuncionario.CidadeEndereco = model.CidadeEnderecoFuncionario;
                enderecoFuncionario.FkIdUF = model.IdUF;
                db.TbEndereco.Add(enderecoFuncionario);
                db.SaveChanges();
                // Insert na tabela pessoa
                var pessoaFuncionario = new TbPessoa();
                pessoaFuncionario.NomePessoa = model.NomeFuncionario;
                pessoaFuncionario.EmailPessoa = model.EmailFuncionario;
                pessoaFuncionario.CpfPessoa = model.CpfFuncionario;
                pessoaFuncionario.DataNascimentoPessoa = model.DataNascimentoFuncionario;
                pessoaFuncionario.TelefonePessoa = model.TelefoneFuncionario;
                pessoaFuncionario.FkIdEndereco = enderecoFuncionario.IdEndereco;
                db.TbPessoa.Add(pessoaFuncionario);
                db.SaveChanges();
                // Insert na tabela usuario
                var usuarioFuncionario = new TbUsuario();
                usuarioFuncionario.LoginUsuario = model.LoginUsuarioFuncionario;
                usuarioFuncionario.SenhaUsuario = model.SenhaUsuarioFuncionario;
                usuarioFuncionario.AtivoUsuario = true;
                // Insert na tabela funcionario
                var funcionario = new TbFuncionario();
                funcionario.MatriculaFuncionario = model.MatriculaFuncionario;
                funcionario.FkIdUsuario = usuarioFuncionario.IdUsuario;
                funcionario.FkIdCargo = model.IdCargoFuncionario;
                funcionario.FkIdPessoa = pessoaFuncionario.IdPessoa;
                funcionario.DataCadastroFuncionario = DateTime.Now.Date;
                db.TbFuncionario.Add(funcionario);
                db.SaveChanges();
                transaction.Commit();
                transaction.Dispose();
                return RedirectToAction("Index");
            }
            catch(Exception e)
            {
                transaction.Rollback();
                transaction.Dispose();
                return View(model);
            }
        }
        return View(model);
    }

Qual é a sua dúvida sobre Dropdownlist ???
De qual tabela quer montar?

Já consegui resolver :slight_smile: de qualquer forma, muito obrigado.

Coloque isso como mensagem explicando sua solução …