none
Pegar valor de uma lista que esta em um formulario RRS feed

  • Pergunta

  • Galera estou com a seguinte duvida, como eu recupero o valor da minha lista que esta em um formulário. O caso de uso é o seguinte, tenho um objeto PRODUTO que possui uma lista de bebidas (listaBebida) eu jogo essa lista carregada (com informações do meu banco de dados) em um form (conforme código da view) onde a pessoa pode alterar apenas o valor (o form possui nome que esta desabilitado para edição e valor que esta habilitado) quando o cliente editar o valor e clicar no botão salvar, quero pegar essa lista que esta na sessão, recebe-la no meu método salvar (do controller) e passa-la como parametro para um metodo no meu service que vai trata-la e fazer um update no banco de dados.

    como eu consigo recuperar esta lista e passa-la como parametro? Segue o código:

    View:

    @model Teste.Models.Produto
    
    @{
        Layout = null;
    }
    @using (Html.BeginForm("Salvar", "ListaProdutoCab", FormMethod.Post))
    {
        <table>
            <thead>
                <tr>
                    <th>Selecione</th>
                    <th>Produto</th>
                    <th>Valor</th>
    
                </tr>
            </thead> @foreach (var item in Model.listaBebida)
            {
                <tr>
                    <td> @Html.CheckBoxFor(modelItem => item.isEditado)</td>
                    <td> @Html.TextBoxFor(modelItem => item.produto, new { disabled = "disabled" }) </td>
                    <td> @Html.TextBoxFor(modelItem => item.valor) </td>
    
                </tr>
            }
        </table>
        <div id="modal">
            <div id="botoes">
                <button type="submit">Salvar</button>
            </div>
        </div>
    }

    Controller

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using Teste.DAO;
    using Teste.Models;
    
    namespace Teste.Controllers
    {
        public class ListaProdutoCab: Controller
        {
            //
            // GET: /ListaProdutoCab/
            ListaProdutoService service = new ListaProdutoService();
            Produto produto = new Produto();
            Session usuario = new Session("Genisson", 058);
    
            List<ObjectMasterProduto> listaProduto= new List<ObjectMasterProduto>();
    
            public ActionResult ListaProdutoCab()
            {
                return View();
            }
    
            public ActionResult List()
    
            {
                service.carregarListaBebida(produto.listaBebida);
                return PartialView(produto);
            }
            [HttpPost]
            public ActionResult Salvar()
            {
                service.Salvar(produto.listaBebida, usuario);
                return RedirectToAction("List");
            }
    
        }
    }


    terça-feira, 30 de junho de 2015 17:19

Todas as Respostas

  • Genisson, so pra esclarecer..rsrs

    vc pega essa lista, salva no banco e depois popula um form? se for isso vc ja pensou em mudar o fluxo? popular o form, o usuario vai fazer as alterações dele. Vc terá lista já com as alterações e ai, salva na base.

    ou vc pode fazer o seguinte: cria um hiddenfield, pra armazenar o id, e via jquery, vc recupera o id, e armazena num array, e depois vc faz uma busca na lista com esses id por lambda


    Ricardo Soares


    • Editado ricardosoares1rj terça-feira, 30 de junho de 2015 20:04 acrescentar orientação
    terça-feira, 30 de junho de 2015 20:01
  • Bom Dia,

    tente o seguinte.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using Teste.DAO;
    using Teste.Models;
    
    namespace Teste.Controllers
    {
        public class ListaProdutoCab: Controller
        {
            //
            // GET: /ListaProdutoCab/
            ListaProdutoService service = new ListaProdutoService();
            Produto produto = new Produto();
            Session usuario = new Session("Genisson", 058);
    
            List<ObjectMasterProduto> listaProduto= new List<ObjectMasterProduto>();
    
            public ActionResult ListaProdutoCab()
            {
                return View();
            }
    
            public ActionResult List()
    
            {
                service.carregarListaBebida(produto.listaBebida);
                return PartialView(produto);
            }
            [HttpPost]
            public ActionResult Salvar(Produto obj)
            {
                service.Salvar(obj, usuario);
                return RedirectToAction("List");
            }
    
        }
    }
    se não funcionar tente usando AJAX.

    atenção não validei o javascript é só um exemplo!

    @model Teste.Models.Produto
    
    @{
        Layout = null;
    }
    @using (Html.BeginForm("Salvar", "ListaProdutoCab", FormMethod.Post))
    {
        <table>
            <thead>
                <tr>
                    <th>Selecione</th>
                    <th>Produto</th>
                    <th>Valor</th>
    
                </tr>
            </thead> 
            <tbody id="ListaBebidas">
    @foreach (var item in Model.listaBebida)
            {
                <tr class="ItemBebida">
                    <td> @Html.CheckBoxFor(modelItem => item.isEditado)</td>
                    <td> @Html.TextBoxFor(modelItem => item.produto, new { disabled = "disabled" }) </td>
                    <td> @Html.TextBoxFor(modelItem => item.valor) </td>
    
                </tr>
            }
    </tbody>
        </table>
        <div id="modal">
            <div id="botoes">
                <button type="submit">Salvar</button>
            </div>
        </div>
    }
    <script>
     var listaBebidas = $("#ListaBebidas").html();
     var itens = [];
     listaBebidas.forEach(function (i) {
        var item = new Object();
        item.isEditado = i[0].InnerText();
        item.produto = i[1].InnerText();
        item.valor = i[2].InnerText();
        itens.push(i);
    });
     $.ajax({
                  type: 'POST',
                  url: "SEU CONTROLLER AQUI/SUA ACTION AQUI",
                 data: JSON.stringify(itens) ,
                  contentType: 'application/json; charset=utf-8',
                   dataType: 'json',
                   async: true
               })
               .done(function (msg) {
                 alert(msg);
                 
    
                });
    </script>


    • Editado MARCOSROCHA21 segunda-feira, 6 de julho de 2015 14:19 correção URL
    segunda-feira, 6 de julho de 2015 14:17