Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como passar multiplos dados selecionados de uma ListBox para o controller ?

Bom dia pessoal, Consigo concluir um cadastro usando DropDown list qd o valor selecionado e unico. Porem nao sei como fazer isso para multiplos valores selecionados em um ListBox. Ele ate salva no banco, mas apenas com o primeiro item selecionado. Como faço para passar multiplos valores para o Controller e como ler e registrar esses valores separadamente depois ?

Agradeço se alguem tiver algum exemplo com isso.

Codigo da View:

<div class="form-group">
    <label class="control-label col-md-3 col-sm-3 col-xs-12">Equipamento teste: <span class="required"></span></label>
    <div class="col-md-6 col-sm-6 col-xs-12">
        @Html.ListBoxFor(model => model.Equipamento, new RELATORIO.Models.UtilCombobox().Equipamento(), new { @class = "form-control", required = "required", size = 5 })
    </div>
</div>

Codigo da camada Controller:

        [HttpPost]
        [Authorize]
        public ViewResult ParametrizacaoProdutividadeEquipamento(ParametrizacaoProdutividadeEquipamentoForm ppe)
        {
            if (ModelState.IsValid
                && (ppe.Equipamento != null || ppe.Equipamento != "")
                && (ppe.Produto != null || ppe.Produto != "")
                && (ppe.DataVigenciaInicio != null)
                && (ppe.DataVigenciaFim != null)
                && (ppe.PecasMinuto != null)
                && (ppe.Multiplicador != null)
                && (ppe.ObjetivoDesempenho != null)
                && (ppe.ObjetivoDisponibilidade != null)
                && (ppe.ObjetivoOEE != null)
                && (ppe.ObjetivoQualidade != null)
                && (ppe.QuantidadeOperadorMinimo != null)
                && (ppe.QuantidadeOperadorMaximo != null)
                && new Cadastro().cadastroPPE(ppe.Equipamento, ppe.Produto, ppe.DataVigenciaInicio, ppe.DataVigenciaFim, ppe.PecasMinuto, ppe.Multiplicador, ppe.ObjetivoOEE, ppe.ObjetivoDisponibilidade, ppe.ObjetivoDesempenho, ppe.ObjetivoQualidade, ppe.QuantidadeOperadorMinimo, ppe.QuantidadeOperadorMaximo)

                )

Chamada para salvar CadastroPPE:

        public bool cadastroPPE(string Equipamento, string Produto, DateTime DataVigenciaInicio, DateTime DataVigenciaFim, int PecasMinuto, int Multiplicador, decimal ObjetivoOEE, decimal ObjetivoDisponibilidade, decimal ObjetivoDesempenho, decimal ObjetivoQualidade, int QuantidadeOperadorMinimo, int QuantidadeOperadorMaximo)
        {
            try
            {
                //int ultimoId = (int)(from it in bd.tbl_PPE_ParametrizacaoProdutividadeEquipamento select it.ppe_ID).Max();
                int eqpID = Convert.ToInt32((from it in bd.tbl_EQP_Equipamento where it.eqp_Descricao == Equipamento select it.eqp_ID).First());
                int iprID = Convert.ToInt32((from it in bd.tbl_IPR_ImportacaoProduto where it.ipr_Codigo == Produto select it.ipr_ID).First());

                using (bd)
                {
                    BancoDeDados.tbl_PPE_ParametrizacaoProdutividadeEquipamento novoTipo = new BancoDeDados.tbl_PPE_ParametrizacaoProdutividadeEquipamento();
                    // novoTipo.ppe_ID = ultimoId + 1;

                    novoTipo.eqp_ID = eqpID;
                    novoTipo.ipr_ID = iprID;
                    novoTipo.ppe_DataVigenciaInicio = DataVigenciaInicio;
                    novoTipo.ppe_DataVigenciaFim = DataVigenciaFim;
                    novoTipo.ppe_PecasMinuto = PecasMinuto;
                    novoTipo.ppe_Multiplicador = Multiplicador;
                    novoTipo.ppe_ObjetivoOEE = ObjetivoOEE;
                    novoTipo.ppe_ObjetivoDisponibilidade = ObjetivoDisponibilidade;
                    novoTipo.ppe_ObjetivoDesempenho = ObjetivoDesempenho;
                    novoTipo.ppe_ObjetivoQualidade = ObjetivoQualidade;
                    novoTipo.ppe_QuantidadeOperadorMinimo = QuantidadeOperadorMinimo;
                    novoTipo.ppe_QuantidadeOperadorMaximo = QuantidadeOperadorMaximo;
                    novoTipo.ppe_Excluido = false;
                    bd.tbl_PPE_ParametrizacaoProdutividadeEquipamento.InsertOnSubmit(novoTipo);
                    bd.SubmitChanges();

                }
                return true;
            }
            catch (Exception e)
            {
                return false;
            }
        }

Obrigado.

1 resposta
solução!

Olá Felippe,

vamos pegar por exemplo que você que receber vários EquipamentoForm no seu controller. Ou que você poderia fazer é no modelo colocar mais uma propriedade do tipo bool chamada de Selecionado.

Então sua view poderia receber uma List<DataVigenciaFim>, com todos os elementos do seu banco de dados.

Para o usuário selecionar quais ele quer, o que você faz é que, para cada EquipamentoForm, colocar um input hidden para cada um dos campos deste modelo (DataVigenciaInicio, DataVigenciaFim, etc) e um campo do tipo Checkbox referente ao Selecionado. Dessa forma, os que ele selecionar o campo Selecionado vai como true e os não selecionados como false.

Por fim, no seu controller você recebe como parâmetro uma List e então filtra aqueles que vieram com Selecionado == true para saber quais foram escolhidos pelo usuário.

Seguem este dois links com exemplos parecido: link1 e link2.