Prévia do material em texto
Treinamento em C# WebDeveloper Aula 09 Sexta-feira, 16 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# Limpando os campos do formulário após o cadastro do Funcionario: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Projeto.Repository.Entities; //importando.. using Projeto.Business; //importando.. using Projeto.Presentation.Models; //importando.. namespace Projeto.Presentation.Controllers { public class FuncionarioController : Controller { // GET: Funcionario/Cadastro public ActionResult Cadastro() { return View(); } [HttpPost] //recebe uma requisição POST da página public ActionResult CadastrarFuncionario(FuncionarioCadastroModel model) { //verificar se os dados recebidos atraves da classe model //passaram nas regras de validação.. if(ModelState.IsValid) { Funcionario funcionario = new Funcionario(); funcionario.Nome = model.Nome; funcionario.Salario = model.Salario; funcionario.DataAdmissao = model.DataAdmissao; FuncionarioBusiness business = new FuncionarioBusiness(); string mensagem = business.Cadastrar(funcionario); //enviando a mensagem para a página.. ViewBag.Resultado = mensagem; //limpar todos os campos do formulário ModelState.Clear(); } //nome da página return View("Cadastro"); } } } Criando a página de consulta de funcionários: @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Consulta</title> <link href="~/Content/bootstrap.css" rel="stylesheet" /> </head> <body> <div class="container"> <h1>Consulta de Funcionários</h1> <a href="/Home/Index" class="btn btn-info btn-sm"> Voltar para página inicial </a> <hr /> <table class="table table-bordered table-hover table-striped"> <thead> <!-- CABEÇALHO --> <tr> <!-- ABRE LINHA --> <th>Código</th> <th>Nome do Funcionário</th> <th>Salário</th> <th>Data de Admissão</th> <th>Operações</th> </tr> <!-- FECHA LINHA --> </thead> <tbody> <!-- CORPO DA TABELA --> </tbody> <tfoot> <!-- RODAPE DA TABELA --> <tr> <!-- ABRE LINHA --> <td colspan="5">Quantidade de Funcionários: </td> </tr> <!-- FECHA LINHA --> </tfoot> </table> </div> </body> </html> Voltando na classe FuncionarioBusiness: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Projeto.Repository.Entities; using Projeto.Repository.Repositories; using System.Diagnostics; namespace Projeto.Business { public class FuncionarioBusiness { //método para realizar o cadastro de um funcionario.. public string Cadastrar(Funcionario f) { FuncionarioRepository funcionarioRepository = new FuncionarioRepository(); try { funcionarioRepository.AbrirConexao(); funcionarioRepository.Inserir(f); return $"Funcionário {f.Nome}, cadastrado com sucesso."; } catch(Exception e) { Debug.WriteLine(e.Message); //retornar mensagem de erro.. return "Erro ao cadastrar funcionário."; } finally { funcionarioRepository.FecharConexao(); } } //método para retornar a consulta de funcionarios public List<Funcionario> Consultar() { //declarar uma lista vazia.. List<Funcionario> lista = new List<Funcionario>(); FuncionarioRepository repository = new FuncionarioRepository(); try { repository.AbrirConexao(); lista = repository.Consultar(); } catch(Exception e) { Debug.WriteLine(e.Message); } finally { repository.FecharConexao(); } //retornar a lista.. return lista; } } } Criando uma classe de modelo para exibir os dados dos funcionarios na página: using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Projeto.Presentation.Models { public class FuncionarioConsultaModel { public int IdFuncionario { get; set; } public string Nome { get; set; } public decimal Salario { get; set; } public DateTime DataAdmissao { get; set; } } } Voltando na classe de controle: /FuncionarioController.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Projeto.Repository.Entities; //importando.. using Projeto.Business; //importando.. using Projeto.Presentation.Models; //importando.. namespace Projeto.Presentation.Controllers { public class FuncionarioController : Controller { // GET: Funcionario/Cadastro public ActionResult Cadastro() { return View(); } // GET: Funcionario/Consulta public ActionResult Consulta() { //declarando uma lista da classe de modelo.. List<FuncionarioConsultaModel> lista = new List<FuncionarioConsultaModel>(); //buscando os dados da camada de negócio.. FuncionarioBusiness business = new FuncionarioBusiness(); foreach(Funcionario funcionario in business.Consultar()) { FuncionarioConsultaModel model = new FuncionarioConsultaModel(); model.IdFuncionario = funcionario.IdFuncionario; model.Nome = funcionario.Nome; model.Salario = funcionario.Salario; model.DataAdmissao = funcionario.DataAdmissao; lista.Add(model); //adicionando na lista.. } //enviando a lista para a página.. return View(lista); } [HttpPost] //recebe uma requisição POST da página public ActionResult CadastrarFuncionario(FuncionarioCadastroModel model) { //verificar se os dados recebidos atraves da classe model //passaram nas regras de validação.. if(ModelState.IsValid) { Funcionario funcionario = new Funcionario(); funcionario.Nome = model.Nome; funcionario.Salario = model.Salario; funcionario.DataAdmissao = model.DataAdmissao; FuncionarioBusiness business = new FuncionarioBusiness(); string mensagem = business.Cadastrar(funcionario); //enviando a mensagem para a página.. ViewBag.Resultado = mensagem; //limpar todos os campos do formulário ModelState.Clear(); } //nome da página return View("Cadastro"); } } } Exibindo os dados na página: @model List<Projeto.Presentation.Models.FuncionarioConsultaModel> @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Consulta</title> <link href="~/Content/bootstrap.css" rel="stylesheet" /> </head> <body> <div class="container"> <h1>Consulta de Funcionários</h1> <a href="/Home/Index" class="btn btn-info btn-sm"> Voltar para página inicial</a> <hr /> <table class="table table-bordered table-hover table-striped"> <thead> <!-- CABEÇALHO --> <tr> <!-- ABRE LINHA --> <th>Código</th> <th>Nome do Funcionário</th> <th>Salário</th> <th>Data de Admissão</th> <th>Operações</th> </tr> <!-- FECHA LINHA --> </thead> <tbody> <!-- CORPO DA TABELA --> @foreach(var funcionario in Model) { <tr> <td>@funcionario.IdFuncionario</td> <td>@funcionario.Nome</td> <td>@funcionario.Salario</td> <td>@funcionario.DataAdmissao</td> <td> <a href="/Funcionario/Exclusao" class="btn btn-danger btn-sm"> Excluir </a> <a href="/Funcionario/Edicao" class="btn btn-primary btn-sm"> Atualizar </a> </td> </tr> } </tbody> <tfoot> <!-- RODAPE DA TABELA --> <tr> <!-- ABRE LINHA --> <td colspan="5"> Quantidade de Funcionários: @Model.Count </td> </tr> <!-- FECHA LINHA --> </tfoot> </table> </div> </body> </html> Executando: Formatando salário e data de admissão: @model List<Projeto.Presentation.Models.FuncionarioConsultaModel> @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Consulta</title> <link href="~/Content/bootstrap.css" rel="stylesheet" /> </head> <body> <div class="container"> <h1>Consulta de Funcionários</h1> <a href="/Home/Index" class="btn btn-info btn-sm"> Voltar para página inicial </a> <hr /> <table class="table table-bordered table-hover table-striped"> <thead> <!-- CABEÇALHO --> <tr> <!-- ABRE LINHA --> <th>Código</th> <th>Nome do Funcionário</th> <th>Salário</th> <th>Data de Admissão</th> <th>Operações</th> </tr> <!-- FECHA LINHA --> </thead> <tbody> <!-- CORPO DA TABELA --> @foreach(var funcionario in Model) { <tr> <td>@funcionario.IdFuncionario</td> <td>@funcionario.Nome</td> <td>@funcionario.Salario.ToString("c")</td> <td>@funcionario.DataAdmissao .ToString("dddd dd/MM/yyyy")</td> <td> <a href="/Funcionario/Exclusao" class="btn btn-danger btn-sm"> Excluir </a> <a href="/Funcionario/Edicao" class="btn btn-primary btn-sm"> Atualizar </a> </td> </tr> } </tbody> <tfoot> <!-- RODAPE DA TABELA --> <tr> <!-- ABRE LINHA --> <td colspan="5"> Quantidade de Funcionários: @Model.Count </td> </tr> <!-- FECHA LINHA --> </tfoot> </table> </div> </body> </html> Criando o método de exclusão na camada de negócio (Business) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Projeto.Repository.Entities; using Projeto.Repository.Repositories; using System.Diagnostics; namespace Projeto.Business { public class FuncionarioBusiness { //método para realizar o cadastro de um funcionario.. public string Cadastrar(Funcionario f) { FuncionarioRepository funcionarioRepository = new FuncionarioRepository(); try { funcionarioRepository.AbrirConexao(); funcionarioRepository.Inserir(f); return $"Funcionário {f.Nome}, cadastrado com sucesso."; } catch(Exception e) { Debug.WriteLine(e.Message); //retornar mensagem de erro.. return "Erro ao cadastrar funcionário."; } finally { funcionarioRepository.FecharConexao(); } } //método para retornar a consulta de funcionarios public List<Funcionario> Consultar() { //declarar uma lista vazia.. List<Funcionario> lista = new List<Funcionario>(); FuncionarioRepository repository = new FuncionarioRepository(); try { repository.AbrirConexao(); lista = repository.Consultar(); } catch(Exception e) { Debug.WriteLine(e.Message); } finally { repository.FecharConexao(); } //retornar a lista.. return lista; } //método para excluir o funcionario.. public string Excluir(int idFuncionario) { FuncionarioRepository repository = new FuncionarioRepository(); try { repository.AbrirConexao(); repository.Excluir(idFuncionario); return "Funcionário excluido com sucesso."; } catch(Exception e) { Debug.WriteLine(e.Message); return "Não foi possível excluir o funcionário"; } finally { repository.FecharConexao(); } } } } Voltando ao MVC: Criando uma caixa de confirmação ao excluir o funcionário: @model List<Projeto.Presentation.Models.FuncionarioConsultaModel> @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Consulta</title> <link href="~/Content/bootstrap.css" rel="stylesheet" /> </head> <body> <div class="container"> <h1>Consulta de Funcionários</h1> <a href="/Home/Index" class="btn btn-info btn-sm"> Voltar para página inicial </a> <hr /> <table class="table table-bordered table-hover table-striped"> <thead> <!-- CABEÇALHO --> <tr> <!-- ABRE LINHA --> <th>Código</th> <th>Nome do Funcionário</th> <th>Salário</th> <th>Data de Admissão</th> <th>Operações</th> </tr> <!-- FECHA LINHA --> </thead> <tbody> <!-- CORPO DA TABELA --> @foreach(var funcionario in Model) { <tr> <td>@funcionario.IdFuncionario</td> <td>@funcionario.Nome</td> <td>@funcionario.Salario.ToString("c")</td> <td>@funcionario.DataAdmissao .ToString("dddd dd/MM/yyyy")</td> <td> <a href="/Funcionario/Exclusao" onclick="return confirm('Deseja excluir o Funcionario @funcionario.Nome ?');" class="btn btn-danger btn-sm"> Excluir </a> <a href="/Funcionario/Edicao" class="btn btn-primary btn-sm">Atualizar </a> </td> </tr> } </tbody> <tfoot> <!-- RODAPE DA TABELA --> <tr> <!-- ABRE LINHA --> <td colspan="5"> Quantidade de Funcionários: @Model.Count </td> </tr> <!-- FECHA LINHA --> </tfoot> </table> </div> </body> </html> QueryString Passagem de parametros pela URL: @model List<Projeto.Presentation.Models.FuncionarioConsultaModel> @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Consulta</title> <link href="~/Content/bootstrap.css" rel="stylesheet" /> </head> <body> <div class="container"> <h1>Consulta de Funcionários</h1> <a href="/Home/Index" class="btn btn-info btn-sm"> Voltar para página inicial </a> <hr /> <table class="table table-bordered table-hover table-striped"> <thead> <!-- CABEÇALHO --> <tr> <!-- ABRE LINHA --> <th>Código</th> <th>Nome do Funcionário</th> <th>Salário</th> <th>Data de Admissão</th> <th>Operações</th> </tr> <!-- FECHA LINHA --> </thead> <tbody> <!-- CORPO DA TABELA --> @foreach(var funcionario in Model) { <tr> <td>@funcionario.IdFuncionario</td> <td>@funcionario.Nome</td> <td>@funcionario.Salario.ToString("c")</td> <td>@funcionario.DataAdmissao .ToString("dddd dd/MM/yyyy")</td> <td> <a href="/Funcionario/Exclusao ?idFuncionario=@funcionario.IdFuncionario" onclick="return confirm('Deseja excluir o Funcionario @funcionario.Nome ?');" class="btn btn-danger btn-sm"> Excluir </a> <a href="/Funcionario/Edicao" class="btn btn-primary btn-sm"> Atualizar </a> </td> </tr> } </tbody> <tfoot> <!-- RODAPE DA TABELA --> <tr> <!-- ABRE LINHA --> <td colspan="5"> Quantidade de Funcionários: @Model.Count </td> </tr> <!-- FECHA LINHA --> </tfoot> </table> </div> </body> </html> Refatoração: (Refactoring) using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Projeto.Repository.Entities; //importando.. using Projeto.Business; //importando.. using Projeto.Presentation.Models; //importando.. namespace Projeto.Presentation.Controllers { public class FuncionarioController : Controller { // GET: Funcionario/Cadastro public ActionResult Cadastro() { return View(); } // GET: Funcionario/Consulta public ActionResult Consulta() { List<FuncionarioConsultaModel> lista = ObterFuncionarios(); //enviando a lista para a página.. return View(lista); } [HttpPost] //recebe uma requisição POST da página public ActionResult CadastrarFuncionario(FuncionarioCadastroModel model) { //verificar se os dados recebidos atraves da classe model //passaram nas regras de validação.. if(ModelState.IsValid) { Funcionario funcionario = new Funcionario(); funcionario.Nome = model.Nome; funcionario.Salario = model.Salario; funcionario.DataAdmissao = model.DataAdmissao; FuncionarioBusiness business = new FuncionarioBusiness(); string mensagem = business.Cadastrar(funcionario); //enviando a mensagem para a página.. ViewBag.Resultado = mensagem; //limpar todos os campos do formulário ModelState.Clear(); } //nome da página return View("Cadastro"); } //GET : /Funcionario/Exclusao?idFuncionario={0} public ActionResult Exclusao(int idFuncionario) { //acessar a camada de regras de negócio.. FuncionarioBusiness business = new FuncionarioBusiness(); string mensagem = business.Excluir(idFuncionario); //exibindo a mensagem na página.. ViewBag.Resultado = mensagem; //redirecionar de volta para a página de consulta.. List<FuncionarioConsultaModel> lista = ObterFuncionarios(); //retornando para a página.. return View("Consulta", lista); } private static List<FuncionarioConsultaModel> ObterFuncionarios() { //declarando uma lista da classe de modelo.. List<FuncionarioConsultaModel> lista = new List<FuncionarioConsultaModel>(); //buscando os dados da camada de negócio.. FuncionarioBusiness business = new FuncionarioBusiness(); foreach (Funcionario funcionario in business.Consultar()) { FuncionarioConsultaModel model = new FuncionarioConsultaModel(); model.IdFuncionario = funcionario.IdFuncionario; model.Nome = funcionario.Nome; model.Salario = funcionario.Salario; model.DataAdmissao = funcionario.DataAdmissao; lista.Add(model); //adicionando na lista.. } return lista; } } } Exibindo a mensagem na página: @model List<Projeto.Presentation.Models.FuncionarioConsultaModel> @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Consulta</title> <link href="~/Content/bootstrap.css" rel="stylesheet" /> </head> <body> <div class="container"> <h1>Consulta de Funcionários</h1> <a href="/Home/Index" class="btn btn-info btn-sm"> Voltar para página inicial </a> <hr /> <h4>@ViewBag.Resultado</h4> <table class="table table-bordered table-hover table-striped"> <thead> <!-- CABEÇALHO --> <tr> <!-- ABRE LINHA --> <th>Código</th> <th>Nome do Funcionário</th> <th>Salário</th> <th>Data de Admissão</th> <th>Operações</th> </tr> <!-- FECHA LINHA --> </thead> <tbody> <!-- CORPO DA TABELA --> @foreach(var funcionario in Model) { <tr> <td>@funcionario.IdFuncionario</td> <td>@funcionario.Nome</td> <td>@funcionario.Salario.ToString("c")</td> <td>@funcionario.DataAdmissao .ToString("dddd dd/MM/yyyy")</td> <td> <a href="/Funcionario/Exclusao ?idFuncionario=@funcionario.IdFuncionario" onclick="return confirm('Deseja excluir o Funcionario @funcionario.Nome ?');" class="btn btn-danger btn-sm"> Excluir </a> <a href="/Funcionario/Edicao" class="btn btn-primary btn-sm"> Atualizar </a> </td> </tr>} </tbody> <tfoot> <!-- RODAPE DA TABELA --> <tr> <!-- ABRE LINHA --> <td colspan="5"> Quantidade de Funcionários: @Model.Count </td> </tr> <!-- FECHA LINHA --> </tfoot> </table> </div> </body> </html> Executando: Criando uma nova página para Edição: /FuncionarioController.cs // GET: Funcionario/Edicao public ActionResult Edicao() { return View(); } @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Edicao</title> <link href="~/Content/bootstrap.css" rel="stylesheet" /> </head> <body> <div class="container"> <h1>Atualizar dados do Funcionário</h1> <a href="/Funcionario/Consulta" class="btn btn-info btn-sm"> Voltar para a consulta </a> <hr/> </div> </body> </html> using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.ComponentModel.DataAnnotations; //importando.. namespace Projeto.Presentation.Models { public class FuncionarioEdicaoModel { [Required(ErrorMessage = "Por favor, informe o id do funcionário.")] public int IdFuncionario { get; set; } [Required(ErrorMessage = "Por favor, informe o nome.")] public string Nome { get; set; } [Required(ErrorMessage = "Por favor, informe o salário.")] public decimal Salario { get; set; } [Required(ErrorMessage = "Por favor, informe a data de admissão.")] public DateTime DataAdmissao { get; set; } } } Criando o formulário de edição: @model Projeto.Presentation.Models.FuncionarioEdicaoModel @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Edicao</title> <link href="~/Content/bootstrap.css" rel="stylesheet" /> </head> <body> <div class="container"> <h1>Atualizar dados do Funcionário</h1> <a href="/Funcionario/Consulta" class="btn btn-info btn-sm"> Voltar para a consulta </a> <hr /> @using (Html.BeginForm("AtualizarFuncionario", "Funcionario", FormMethod.Post)) { <div class="text-danger"> @Html.ValidationSummary() </div> <!-- CAMPO OCULTO --> @Html.HiddenFor(model => model.IdFuncionario); <label>Nome do Funcionário:</label> <br /> @Html.TextBoxFor(model => model.Nome, new { @class = "form-control col-md-3", @placeholder = "Informe o nome" }) <br /> <label>Salário:</label> <br /> @Html.TextBoxFor(model => model.Salario, new { @class = "form-control col-md-3", @placeholder = "Informe o salário" }) <br /> <label>Data de Admissão:</label> <br /> @Html.TextBoxFor(model => model.DataAdmissao, new { @class = "form-control col-md-3", @type = "date" }) <br /> <input type="submit" value="Atualizar Funcionário" class="btn btn-primary" /> <br /> <br /> <h4>@ViewBag.Resultado</h4> } </div> </body> </html> Criando na camada de repositorio de dados um método para buscar o funcionario pelo id using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; //Acesso ao SqlServer using Projeto.Repository.Entities; //Classes de entidade namespace Projeto.Repository.Repositories { public class FuncionarioRepository : Conexao { //método para inserir um funcionário na base de dados.. public void Inserir(Funcionario f) { string query = "insert into Funcionario(Nome, Salario, DataAdmissao) " + "values(@Nome, @Salario, @DataAdmissao)"; Command = new SqlCommand(query, Connection); Command.Parameters.AddWithValue("@Nome", f.Nome); Command.Parameters.AddWithValue("@Salario", f.Salario); Command.Parameters.AddWithValue("@DataAdmissao", f.DataAdmissao); Command.ExecuteNonQuery(); } //método para atualizar um funcionário na base de dados.. public void Atualizar(Funcionario f) { string query = "update Funcionario set Nome = @Nome, Salario = @Salario, " + "DataAdmissao = @DataAdmissao where IdFuncionario = @IdFuncionario"; Command = new SqlCommand(query, Connection); Command.Parameters.AddWithValue("@Nome", f.Nome); Command.Parameters.AddWithValue("@Salario", f.Salario); Command.Parameters.AddWithValue("@DataAdmissao", f.DataAdmissao); Command.Parameters.AddWithValue("@IdFuncionario", f.IdFuncionario); Command.ExecuteNonQuery(); } //método para excluir o funcionario na base de dados.. public void Excluir(int idFuncionario) { string query = "delete from Funcionario where IdFuncionario = @IdFuncionario"; Command = new SqlCommand(query, Connection); Command.Parameters.AddWithValue("@IdFuncionario", idFuncionario); Command.ExecuteNonQuery(); } //método para listar todas as vendas na base de dados.. public List<Funcionario> Consultar() { string query = "select * from Funcionario"; Command = new SqlCommand(query, Connection); DataReader = Command.ExecuteReader(); List<Funcionario> lista = new List<Funcionario>(); while (DataReader.Read()) { Funcionario funcionario = new Funcionario(); funcionario.IdFuncionario = Convert.ToInt32 (DataReader["IdFuncionario"]); funcionario.Nome = Convert.ToString(DataReader["Nome"]); funcionario.Salario = Convert.ToDecimal(DataReader["Salario"]); funcionario.DataAdmissao = Convert.ToDateTime (DataReader["DataAdmissao"]); lista.Add(funcionario); } return lista; } //método para buscar 1 funcionário pelo id.. public Funcionario ConsultarPorId(int idFuncionario) { string query = "select * from Funcionario where IdFuncionario = @IdFuncionario"; Command = new SqlCommand(query, Connection); Command.Parameters.AddWithValue("@IdFuncionario", idFuncionario); DataReader = Command.ExecuteReader(); if(DataReader.Read()) { Funcionario funcionario = new Funcionario(); funcionario.IdFuncionario = Convert.ToInt32 (DataReader["IdFuncionario"]); funcionario.Nome = Convert.ToString(DataReader["Nome"]); funcionario.Salario = Convert.ToDecimal(DataReader["Salario"]); funcionario.DataAdmissao = Convert.ToDateTime (DataReader["DataAdmissao"]); return funcionario; //retornando o funcionario } else { return null; //sem espaço de memória.. (vazio) } } } } Voltando para a camada de negócio: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Projeto.Repository.Entities; using Projeto.Repository.Repositories; using System.Diagnostics; namespace Projeto.Business { public class FuncionarioBusiness { //método para realizar o cadastro de um funcionario..public string Cadastrar(Funcionario f) { FuncionarioRepository funcionarioRepository = new FuncionarioRepository(); try { funcionarioRepository.AbrirConexao(); funcionarioRepository.Inserir(f); return $"Funcionário {f.Nome}, cadastrado com sucesso."; } catch(Exception e) { Debug.WriteLine(e.Message); //retornar mensagem de erro.. return "Erro ao cadastrar funcionário."; } finally { funcionarioRepository.FecharConexao(); } } //método para retornar a consulta de funcionarios public List<Funcionario> Consultar() { //declarar uma lista vazia.. List<Funcionario> lista = new List<Funcionario>(); FuncionarioRepository repository = new FuncionarioRepository(); try { repository.AbrirConexao(); lista = repository.Consultar(); } catch(Exception e) { Debug.WriteLine(e.Message); } finally { repository.FecharConexao(); } //retornar a lista.. return lista; } //método para excluir o funcionario.. public string Excluir(int idFuncionario) { FuncionarioRepository repository = new FuncionarioRepository(); try { repository.AbrirConexao(); repository.Excluir(idFuncionario); return "Funcionário excluido com sucesso."; } catch(Exception e) { Debug.WriteLine(e.Message); return "Não foi possível excluir o funcionário"; } finally { repository.FecharConexao(); } } //método para consultar 1 funcionario pelo id.. public Funcionario ConsultarPorId(int idFuncionario) { FuncionarioRepository repository = new FuncionarioRepository(); Funcionario funcionario = null; //sem espaço de memória try { repository.AbrirConexao(); funcionario = repository.ConsultarPorId(idFuncionario); } catch(Exception e) { Debug.WriteLine(e.Message); } finally { repository.FecharConexao(); } return funcionario; //retornando o objeto.. } } } Voltando ao controller: @foreach(var funcionario in Model) { <tr> <td>@funcionario.IdFuncionario</td> <td>@funcionario.Nome</td> <td>@funcionario.Salario.ToString("c")</td> <td>@funcionario.DataAdmissao .ToString("dddd dd/MM/yyyy") </td> <td> <a href="/Funcionario/Exclusao ?idFuncionario=@funcionario.IdFuncionario" onclick="return confirm('Deseja excluir o Funcionario @funcionario.Nome ?');" class="btn btn-danger btn-sm"> Excluir </a> <a href="/Funcionario/Edicao ?idFuncionario=@funcionario.IdFuncionario" class="btn btn-primary btn-sm"> Atualizar </a> </td> </tr> } --------------------------- using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Projeto.Repository.Entities; //importando.. using Projeto.Business; //importando.. using Projeto.Presentation.Models; //importando.. namespace Projeto.Presentation.Controllers { public class FuncionarioController : Controller { // GET: Funcionario/Cadastro public ActionResult Cadastro() { return View(); } // GET: Funcionario/Consulta public ActionResult Consulta() { List<FuncionarioConsultaModel> lista = ObterFuncionarios(); //enviando a lista para a página.. return View(lista); } // GET: Funcionario/Edicao?idFuncionario={0} public ActionResult Edicao(int idFuncionario) { FuncionarioEdicaoModel model = new FuncionarioEdicaoModel(); //buscando da camada de negócio.. FuncionarioBusiness business = new FuncionarioBusiness(); Funcionario funcionario = business.ConsultarPorId(idFuncionario); //verificar se o funcionario foi encontrado.. if(funcionario != null) { model.IdFuncionario = funcionario.IdFuncionario; model.Nome = funcionario.Nome; model.Salario = funcionario.Salario; model.DataAdmissao = funcionario.DataAdmissao; } //enviando a model.. return View(model); } [HttpPost] //recebe uma requisição POST da página public ActionResult CadastrarFuncionario(FuncionarioCadastroModel model) { //verificar se os dados recebidos atraves da classe model //passaram nas regras de validação.. if(ModelState.IsValid) { Funcionario funcionario = new Funcionario(); funcionario.Nome = model.Nome; funcionario.Salario = model.Salario; funcionario.DataAdmissao = model.DataAdmissao; FuncionarioBusiness business = new FuncionarioBusiness(); string mensagem = business.Cadastrar(funcionario); //enviando a mensagem para a página.. ViewBag.Resultado = mensagem; //limpar todos os campos do formulário ModelState.Clear(); } //nome da página return View("Cadastro"); } //GET : /Funcionario/Exclusao?idFuncionario={0} public ActionResult Exclusao(int idFuncionario) { //acessar a camada de regras de negócio.. FuncionarioBusiness business = new FuncionarioBusiness(); string mensagem = business.Excluir(idFuncionario); //exibindo a mensagem na página.. ViewBag.Resultado = mensagem; //redirecionar de volta para a página de consulta.. List<FuncionarioConsultaModel> lista = ObterFuncionarios(); //retornando para a página.. return View("Consulta", lista); } private static List<FuncionarioConsultaModel> ObterFuncionarios() { //declarando uma lista da classe de modelo.. List<FuncionarioConsultaModel> lista = new List<FuncionarioConsultaModel>(); //buscando os dados da camada de negócio.. FuncionarioBusiness business = new FuncionarioBusiness(); foreach (Funcionario funcionario in business.Consultar()) { FuncionarioConsultaModel model = new FuncionarioConsultaModel(); model.IdFuncionario = funcionario.IdFuncionario; model.Nome = funcionario.Nome; model.Salario = funcionario.Salario; model.DataAdmissao = funcionario.DataAdmissao; lista.Add(model); //adicionando na lista.. } return lista; } } } Na página: 29