2

我得到了一份清单:

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"/>
}

请帮我!

4

2 回答 2

2

使用 IEnumerable

然后控制器输入参数将是 List

也许还可以考虑使用带有 JSON 对象的 AJAX POST 来代替表单提交(更现代/优雅),但提交也很好。

于 2012-09-25T16:04:54.820 回答
2

部分问题是它不会发布整个模型,因为只有复选框是表单值。我认为您需要在表单中添加一个额外的隐藏值来跟踪项目编号,然后在控制器中专门处理复选框值。项目编号附加到发布值中的“复选框”以保持它们的区别。

<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();
    }
于 2012-09-25T18:31:30.573 回答