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.