Post in a checkbox list

Asked

Viewed 802 times

2

I am creating an application where the user will be able to select a variety of products through checkbox. But when I click on "Buy" the list is empty. Someone can give me a help with this?

That code is from View:

<tbody>
 @foreach (var servico in Model.Servicos)
 {
<tr>
    <td>
        @servico.Descricao_Servico
    </td>
<td>
    @servico.Valor_Servico
</td>
    <td>
        <label class="checkbox inline">
        <input type="checkbox"  id="@servico.Id" />
        </label>
    </td>
</tr>  
 }
</tbody>

This next one is the controller

public ActionResult Cadastrar()
{
    var modelo = ModeloCadastrar();
    return View(modelo);
}

private CadastrarAgendamentoViewModel ModeloCadastrar()
{
    var modelo = new CadastrarAgendamentoViewModel();

    var ddlListaDeFuncionarios = _contexto.Funcionarios.ToList();
    var ddlListaDeServicos = _contexto.Servicos.ToList();
    var ddlProdutos = _contexto.Produtos.ToList();

    modelo.ListaDeFuncionarios = (from funcionarios in ddlListaDeFuncionarios
                                  select new SelectListItem
                                  {
                                      Text = funcionarios.Nome_Usuario,
                                      Value = funcionarios.Id.ToString(),
                                  }).ToList();


    modelo.ListaDeProdutos = (from produtos in ddlProdutos
                              select new SelectListItem
                              {
                                  Text = produtos.Descricao_Produto,
                                  Value = produtos.Id.ToString(),
                              }).ToList();
    modelo.Servicos = ddlListaDeServicos;

    modelo.Data_Agendamento = System.DateTime.Now;
    modelo.Hora_Agendamento = "08:00";
    return modelo;
}

3 answers

1

Example: Formcollection

View:

@{
    ViewBag.Title = "Lista";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm()) { 
    <h2>Lista</h2>
    <div>
        <label for="Produto1">Produto 1</label>
        <input type="checkbox" id="Produto1" name="Produto" value="1">
    </div>
    <div>
        <label for="Produto2">Produto 2</label>
        <input type="checkbox" id="Produto2" name="Produto" value="2">
    </div>
    <div>
        <label for="Produto3">Produto 3</label>
        <input type="checkbox" id="Produto3" name="Produto" value="3">
    </div>
    <div>
        <label for="Produto4">Produto 4</label>
        <input type="checkbox" id="Produto4" name="Produto" value="4">
    </div>
    <div>
        <button type="submit">Enviar</button>
    </div>
}

Action:

[HttpGet]
public ActionResult Lista()
{
    return View();
}

[HttpPost]
public ActionResult Lista(FormCollection form)
{    
    System.Collections.IEnumerable Produto = form["Produto"];
    return RedirectToAction("Lista");
}

Generated page - Html

inserir a descrição da imagem aqui

When I click the button Submit Send

inserir a descrição da imagem aqui

Now everything will depend on your model and rule of your application

1

The first problem is the lack of attribute name in the input. Without a name the input is not posted.

Your checkbox should be done as follows:

<input type="checkbox" id="@servico.Id" name="Servicos" value="@servico.Id" />

That should solve the post. Also if you expect to receive on controller an array of service, do as follows:

<tbody>
 @{
     var i = 0;
 }
 @foreach (var servico in Model.Servicos)
 {
<tr>
    <td>
        @servico.Descricao_Servico
    </td>
<td>
    @servico.Valor_Servico
</td>
    <td>
        <label class="checkbox inline">
            <input type="checkbox"  id="@servico.Id" name='@string.format("Servicos[{0}]", i)' value="@servico.Id" />
        </label>
    </td>
</tr>
  @{i++;}
 }
</tbody>

Thus its post will send an array of checkboxes with values and the ModelBinder Mvc will be able to create your object, or you can search for values by formcollection.

0

Unfortunately it didn’t work for me. I’ll send you the model I send to the view. `Follow my model:

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

        public int ClienteId { get; set; }

        [Required(ErrorMessage="Campo obrigatório")]
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
        public DateTime Data_Agendamento { get; set; }

        [Required(ErrorMessage = "Campo obrigatório")]
        public string Hora_Agendamento { get; set; }

        public int Atendido_Agendamento { get; set; }
        public int Id_Cliente { get; set; }

        [Required(ErrorMessage = "Campo obrigatório")]
        public int Id_Funcionario { get; set; }
        public IList<SelectListItem> ListaDeFuncionarios { get; set; }

        public Nullable<int> Id_Produto { get; set; }
        public IList<SelectListItem> ListaDeProdutos { get; set; }

        public List<T_Servicos> Servicos { get; set; }

        public double Preco_Agendamento { get; set; }

        public bool Sucesso { get; set; }

        public string Mensagem { get; set; }

        public CadastrarAgendamentoViewModel()
        {
            Servicos = new List<T_Servicos>();
        }

        public LayoutHelper helper { get; set; }
    }
}

My intention is to dynamically arrange the checkbox in a table.

`

  • 1

    Use the edit link in your question to add other information. The Post Answer button should only be used to complete answers to the question.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.