none
Editar dados de duas tabelas utilizando a ViewModel. RRS feed

  • Pergunta

  • Tenho duas tabelas uma cliente e outra dadosclientes, só estou conseguindo editar os dados de clientes, coloquei os clientes e dadosclientes em uma ViewModel para serem alterados, conforme o código abaixo.

                                                                        

     public class ClientesCadastradosViewModels
        {
            public int Id { get; set; }

            public string Email { get; set; }

            public string Nome { get; set; }

            public DateTime DataCadastro { get; set; }

            public DateTime Data { get; set; }

            public string Complemento { get; set; }

            public string Cpf { get; set; }

            public string Telefone { get; set; }

            public string Celular { get; set; }

            public string Bairro { get; set; }

            public string Cep { get; set; }





            public ClientesCadastradosViewModels()
            {

            }

            public ClientesCadastradosViewModels(Cliente ViewModel)
            {
                Id = ViewModel.Id;
                Nome = ViewModel.Nome;
                Email = ViewModel.Email;
                DataCadastro = ViewModel.DataCadastro;

            }

            public ClientesCadastradosViewModels(DadosCliente ViewModel)
            {

                Cpf = ViewModel.CPF;
                Telefone = ViewModel.Telefone;
                Cep = ViewModel.CEP;
                Data = ViewModel.DataNascimento;
                Bairro = ViewModel.Bairro;
                Complemento = ViewModel.Complemento;
            }

            public object ToUpdate()
            {
                return new
                {

                    Nome = this.Nome,
                    Email = this.Email,
                    DataCadastro = this.DataCadastro,
                    Cpf = this.Cpf,
                    Telefone = this.Telefone,
                    Cep = this.Cep,
                    Data = this.Data,
                    Bairro = this.Bairro,
                    Complemento = this.Complemento


                };
            }

    //Controler 

    public ActionResult Editar(int id)
            {

                var viewModel = (from c in _db.ClienteSet
                                 join d in _db.DadosClienteSet on c.Id equals d.IdCliente
                                 where c.Id == id

                                 select new ClientesCadastradosViewModels
                                 {
                                     Id = c.Id,
                                     Nome = c.Nome,
                                     Email = c.Email,
                                     DataCadastro = c.DataCadastro,
                                     Cpf = d.CPF,
                                     Telefone = d.Telefone,
                                     Cep = d.CEP,
                                     Data = d.DataNascimento,
                                     Bairro = d.Bairro,
                                     Complemento = d.Complemento
                                 }).SingleOrDefault();
                                 

                return View(viewModel);
            }

            [HttpPost]
            public ActionResult Editar(int id, ClientesCadastradosViewModels view)
            {
                if (ModelState.IsValid)
                {

                    var Editarcliente = _db.ClienteSet.Find(id);
                    var entry = _db.Entry(Editarcliente);
                    entry.CurrentValues.SetValues(view.ToUpdate());



                    _db.SaveChanges();

                   

                    return RedirectToAction("Buscar");
                }
                
                return View();
            }
     
    quarta-feira, 5 de dezembro de 2012 11:23

Respostas

  • Consegui resolver, na verdade por ser meu primeiro projeto não consegui explicar da maneira correta mais valeu!! segue o código com a solução ..

    if (ModelState.IsValid)
                {

                    var Editarcliente = _db.ClienteSet.Find(id);
                    var entry = _db.Entry(Editarcliente);
                    entry.CurrentValues.SetValues(view.ToUpdate());
                    //--------------------------------------------------------------------
                    var editarDados = _db.DadosClienteSet.Where(x => x.IdCliente == id).SingleOrDefault();
                    var entry2 = _db.Entry(editarDados);
                    entry2.CurrentValues.SetValues(view.ToUpdateDados());
                    //--------------------------------------------------------------------
                    _db.SaveChanges();

    • Sugerido como Resposta Paulo M Dalbosco quarta-feira, 5 de dezembro de 2012 15:29
    • Marcado como Resposta juniorleles quarta-feira, 5 de dezembro de 2012 16:15
    quarta-feira, 5 de dezembro de 2012 15:15

Todas as Respostas

  • Não entendi a sua dúvida. Vc não esta conseguindo usar a view Edit referente a essas tabelas?
    quarta-feira, 5 de dezembro de 2012 11:25
  • Bom dia Paulo, não sei se vou conseguir te explicar da maneira correta,

      Tenho essas duas listas clientes e dadosclientes referente as tabalas clientes e Dadosclientes.

           public DbSet<Cliente> ClienteSet { get; set; }
           public DbSet<DadosCliente> DadosClienteSet { get; set; }

       Quando vou editar só consigo pegar o Id do cliente que seria o ClienteSet, queria saber como eu faço parar editar os dados do DadosClienteSet

       não sei se essa é a melhor maneira.  

            [HttpPost]
            public ActionResult Editar(int id, ClientesCadastradosViewModels view)
            {
                if (ModelState.IsValid)
                {

                    var Editarcliente = _db.ClienteSet.Find(id);
                    var entry = _db.Entry(Editarcliente);
                    entry.CurrentValues.SetValues(view.ToUpdate());



                    _db.SaveChanges();

                   

                    return RedirectToAction("Buscar");
                }
                
                return View();
            }

    quarta-feira, 5 de dezembro de 2012 11:47
  • Mas não esta chegando o ID nesta função?

    public ActionResult Editar(int id, ClientesCadastradosViewModels view)

    Vc esta direcionando de que forma para esta função? Uma ActionLink?

    quarta-feira, 5 de dezembro de 2012 12:01
  • Sim esta chegando o ID do cliente, sim um ActionLink, queria saber como eu faço para editar os dadoscliente se existe outra maneira?

    

     
    • Marcado como Resposta juniorleles quarta-feira, 5 de dezembro de 2012 15:11
    • Não Marcado como Resposta juniorleles quarta-feira, 5 de dezembro de 2012 15:12
    quarta-feira, 5 de dezembro de 2012 13:04
  • Só para eu poder entender.

    Esta função eh de Post, antes de chegar aqui ele passou pelo get, lhe retornou os dados do banco em uma view, vc alterou e deu um "post" que chegou nesta função.

    Qual forma diferente dessa vc gostaria de fazer?

    • Marcado como Resposta juniorleles quarta-feira, 5 de dezembro de 2012 15:08
    • Não Marcado como Resposta juniorleles quarta-feira, 5 de dezembro de 2012 15:10
    quarta-feira, 5 de dezembro de 2012 13:13
  • Consegui resolver, na verdade por ser meu primeiro projeto não consegui explicar da maneira correta mais valeu!! segue o código com a solução ..

    if (ModelState.IsValid)
                {

                    var Editarcliente = _db.ClienteSet.Find(id);
                    var entry = _db.Entry(Editarcliente);
                    entry.CurrentValues.SetValues(view.ToUpdate());
                    //--------------------------------------------------------------------
                    var editarDados = _db.DadosClienteSet.Where(x => x.IdCliente == id).SingleOrDefault();
                    var entry2 = _db.Entry(editarDados);
                    entry2.CurrentValues.SetValues(view.ToUpdateDados());
                    //--------------------------------------------------------------------
                    _db.SaveChanges();

    • Sugerido como Resposta Paulo M Dalbosco quarta-feira, 5 de dezembro de 2012 15:29
    • Marcado como Resposta juniorleles quarta-feira, 5 de dezembro de 2012 16:15
    quarta-feira, 5 de dezembro de 2012 15:15