Array
(
)

[DÚVIDA] ASP NET MVC

Ricardo
   - 06 abr 2016

Bom dia, estou desenvolvendo uma aplicação em ASP .NET MVC 4 com C#, e surgiram alguns problemas.
Será que alguém pode me dar uma ajuda?
A aplicação é um cadastro de funcionários, onde as áreas, cargos e empregadores são gravados em tabelas próprias, eu passo apenas os IDs na tabela funcionário, até ai tudo bem. Porem quando eu vou fazer o update de algum funcionário, ele não está carregando a informação correta, ele está mostrando o primeiro CARGO, ÁREA e EMPREGADOR da tabela, e não o que está preenchido. (do jeito que eu fiz no código abaixo estava funcionando....)
A segunda e mais importante dúvida é, como eu faço para pegar o IDArea da tabela funcionários e salvar o nome da área em uma variável, preciso disso por que tenho uma tabela de EVENTOS, onde eu vou salvar as alterações de áreas, cargos e empregadores, e a coluna onde vou salvar essa informação recebe uma string. O grande problema aqui é fazer isso utilizando expressão lambda (ou algo que o entity framework entenda), se fosse com comando do SQL seria bem fácil. (O mapeamento do banco de dados foi feito com o Entity Framework)
Vamos ao código:
Controller
#Código

 //EDITAR
        public ActionResult Editar(long id)
        {
            Funcionarios funcionario = db.Funcionarios.Find(id);

            ViewBag.IDArea = new SelectList(db.Areas, "IDArea", "Nome");
            ViewBag.IDCargo = new SelectList(db.Cargos, "IDCargo", "Nome");
            ViewBag.IDEmpregador = new SelectList(db.Empregadores, "IDEmpregador", "Nome");

            return View(funcionario);
        }

        [HttpPost]
        public ActionResult Editar(Funcionarios funcionario, Eventos evento)
        {
            Funcionarios comparaFunc = new Funcionarios();
            
            ViewBag.IDArea = new SelectList(db.Areas, "IDArea", "Nome");
            string novaArea = "???";


            if (ModelState.IsValid)
            {
                //Alimentar a tabela EVENTOS antes de efetuar o update no banco de dados
                if (comparaFunc.IDArea != funcionario.IDArea)
                {
                    evento.IDFuncionario = funcionario.IDFuncionario;
                    evento.IDTipoDeEvento = 1;
                    evento.NovoValor = novaArea;
                    evento.DataAlteracao = DateTime.Now;
                }
                
                //atualizando as informações do funcionario
                funcionario.UltimaAtualizacao = DateTime.Now;
                funcionario.StatusFunc = funcionario.StatusFunc;

                db.Entry(funcionario).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(funcionario);
        }//fim EDITAR

Trecho da view q exibe o drop daw list
#Código
 <div class="editor-label">
            @Html.LabelFor(model => model.IDArea)
        </div>
        <div class="editor-field">
            @Html.DropDownList("IDArea")
            @Html.ValidationMessageFor(model => model.IDArea)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.IDCargo)
        </div>
        <div class="editor-field">
            @Html.DropDownList("IDCargo")
            @Html.ValidationMessageFor(model => model.IDCargo)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.IDEmpregador)
        </div>
        <div class="editor-field">
            @Html.DropDownList("IDEmpregador")
            @Html.ValidationMessageFor(model => model.IDEmpregador)
        </div>

/*No computador do meu trabalho ele carrega corretamente os dados nos ddl, na minha casa ele carrega o primeiro registro de cada tabela... estranho....*/

Obrigado.