Usuário com melhor resposta
Resposta CheckBox MVC

Pergunta
-
Pessoal, boa noite
Sou novo no MVC, e tive que um relatório onde eu passo um lista de objetos
e faço o seguinte codigo
Para preencher uma table
if (Model.ModelObj.ResultadoBusca != null) { var Lista = new List<string>(); if (Model.ModelObj.TipoFiltro == "Promotor") { Lista = (from tb in Model.ModelObj.ResultadoBusca group tb.Promotor.Trim() by new {promotor = tb.Promotor} into g select g.Key.promotor).ToList(); } else if (Model.ModelObj.TipoFiltro == "Pagamento") { Lista = (from tb in Model.ModelObj.ResultadoBusca group tb.TipoPagamento by new {tb.TipoPagamento} into g select g.Key.TipoPagamento).ToList(); } else if (Model.ModelObj.TipoFiltro == "Banco") { Lista = (from tb in Model.ModelObj.ResultadoBusca group tb.Banco by new {tb.Banco} into g select g.Key.Banco).ToList(); } foreach (var pro in Lista) { var dados = new List<DadosRelatorio>(); switch (Model.ModelObj.TipoFiltro) { case "Promotor": dados = (from tb in Model.ModelObj.ResultadoBusca where tb.Promotor.Trim() == pro.Trim() select tb).ToList(); string doc = (from tb in Model.ModelObj.ResultadoBusca where tb.Promotor.Trim() == pro.Trim() select tb.Documento).FirstOrDefault(); <h3> @pro (@doc) </h3> break; case "Pagamento": <h3>@pro</h3> dados = (from tb in Model.ModelObj.ResultadoBusca where tb.TipoPagamento.Trim() == pro.Trim() select tb).ToList(); break; case "Banco": <h3>@pro</h3> dados = (from tb in Model.ModelObj.ResultadoBusca where tb.Banco.Trim() == pro.Trim() select tb).ToList(); break; } <table style="display: block" class="report"> <thead> <tr> <th></th> <th>Id Contrato </th> </tr> </thead> <tbody> @foreach (var item in dados) { <tr> <td>@Html.CheckBoxFor(m => item.Selecao) </td> <td> @item.IdContrato </td> < </tr> } </tbody> </table> }
Só que eu preciso resgatar os valores dos checkBox
Respostas
-
Pessoal, o problema eram as seguintes questões.
1º
Eu estava utilizando uma classe gererica como tipo da View
Ou seja
ClassGeneric<Contratos>
E quando você trabalha com desta forma, você tem que colocar um ModelBinder próprio
Mais informações sobre isso:http://stackoverflow.com/questions/1487005/asp-net-mvc-model-binder-for-generic-type
2º
Utilizando o foreach ele da um bind no value do campo
então troquei e ficou assim
@for (int i = 0; i < Model.ResultadoBusca.Count; i++) { <tr> <td> @Html.Label(Model.ResultadoBusca[i].IdContrato.ToString()) @Html.HiddenFor(m => m.ResultadoBusca[i].IdContrato) </td> <td> @Html.CheckBoxFor(m => m.ResultadoBusca[i].Selecao) </td> </tr> }
- Marcado como Resposta Diego de Brito sexta-feira, 12 de julho de 2013 18:25
Todas as Respostas
-
Use checkbox simples ao invés de checkboxfor:
@Html.CheckBox("checkContrato", new { value = item.IdContrato });
- Sugerido como Resposta Paulo M Dalbosco sexta-feira, 12 de julho de 2013 11:17
-
Meu problema é que não esta trazendo a lista que eu populei com o Foreach
Segue um código mais simples ( que inclusive coloquei da maneira que você sugeriu)
<table> <thead> <tr> <th>idContratato</th> <th>Selecionar</th> </tr> </thead> <tbody> @foreach (var item in Model.ModelObj.ResultadoBusca) { <tr> <td> @item.IdContrato </td> <td> @Html.CheckBox("checkContrato", new { value = item.IdContrato }); <input name="regioes" value="@item.IdContrato" type="checkbox" /> </td> </tr> } </tbody> </table>
-
Pessoal, o problema eram as seguintes questões.
1º
Eu estava utilizando uma classe gererica como tipo da View
Ou seja
ClassGeneric<Contratos>
E quando você trabalha com desta forma, você tem que colocar um ModelBinder próprio
Mais informações sobre isso:http://stackoverflow.com/questions/1487005/asp-net-mvc-model-binder-for-generic-type
2º
Utilizando o foreach ele da um bind no value do campo
então troquei e ficou assim
@for (int i = 0; i < Model.ResultadoBusca.Count; i++) { <tr> <td> @Html.Label(Model.ResultadoBusca[i].IdContrato.ToString()) @Html.HiddenFor(m => m.ResultadoBusca[i].IdContrato) </td> <td> @Html.CheckBoxFor(m => m.ResultadoBusca[i].Selecao) </td> </tr> }
- Marcado como Resposta Diego de Brito sexta-feira, 12 de julho de 2013 18:25