我得到了一份清单:
public class Items
{
public String Nro_Item { get; set; }
public Sucursal Sucursal { get; set; }
public Areas Area { get; set; }
public Sectores Sector { get; set; }
public bool ID_Estado { get; set; }
}
我将它传递给这个观点:
@using ClientDependency.Core.Mvc
@model IEnumerable<TrackingOperaciones.Controllers.Items>
@{
ViewBag.Title = "Ver Items";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<br/>
@using (Html.BeginForm("CargarRecibidos", "Recepcion", FormMethod.Post))
{
<table class="table table-striped table-bordered table-condensed">
<tr>
<th>
Numero
</th>
<th>
Sucursal
</th>
<th>
Area
</th>
<th>
Sector
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Nro_Item)
</td>
<td>
@Html.DisplayFor(modelItem => item.Sucursal.descripcion)
</td>
<td>
@Html.DisplayFor(modelItem => item.Area.descripcion)
</td>
<td>
@Html.DisplayFor(modelItem => item.Sector.Descripcion)
</td>
<td>
@Html.CheckBoxFor(modelItem => item.ID_Estado)
</td>
</tr>
}
</table>
<p>
<input class="btn" name="Guardar" type="submit" value="Guardar"/> |
@Html.ActionLink("Volver al listado de Recepción", "Index")
</p>
}
直到一切都很好:现在问题是使用控制器中的已检查值返回整个模型,以便像这样处理它:
[HttpPost]
public ActionResult CargarRecibidos(IEnumerable<Items> items)
{
if (ModelState.IsValid)
{
//do something here
}
return RedirectToAction("Index");
}
}
但是我惨遭失败,因为“物品”在回发中空了回来
我猜这个表格有问题
@using (Html.BeginForm("CargarRecibidos", "Recepcion"))
{
<input class="btn" name="Guardar" type="submit" value="Guardar"/>
}
请帮助我!
答案 0 :(得分:2)
使用IEnumerable
然后控制器输入参数将为List
也许还考虑使用带有JSON对象的AJAX POST来代替表单提交(更现代/更优雅),但提交也很好。
答案 1 :(得分:1)
部分问题是它不会发布整个模型,因为只有复选框是表单值。我认为您需要在表单中添加一个额外的隐藏值来跟踪项目编号,然后在控制器中专门处理复选框值。项目编号将附加到已过帐值中的“复选框”以使其保持不同。
<tr>
<td>
@Html.DisplayFor(modelItem => item.Nro_Item)
@Html.Hidden("Nro_Item", item.Nro_Item)
</td>
<td>
@Html.DisplayFor(modelItem => item.Sucursal.descripcion)
</td>
<td>
@Html.DisplayFor(modelItem => item.Area.descripcion)
</td>
<td>
@Html.DisplayFor(modelItem => item.Sector.Descripcion)
</td>
<td>
@Html.CheckBox("checkbox" + item.Nro_Item, item.ID_Estado)
</td>
</tr>
在控制器中只绑定到数字项,因此可以用它来处理复选框:
[HttpPost]
public ActionResult CargarRecibidos(List<string> nro_item)
{
foreach (string item in nro_item)
{
var checkbox=Request.Form["checkbox" + item];
if (checkbox != "false") // if not false then true,false is returned
{
// Do the action for true...
}
else
{
// Do the action for false
}
}
return View();
}