我可以在mvc中的httppost中插入不同的对象吗?

时间:2017-04-04 21:59:24

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我是asp.net和mvc的新手,我正在尝试使用表单发送一个int,一个来自不同对象的int列表,以及来自另一个对象的其他int列表。

我对插入int的看法是

@using (Html.BeginForm("Guardar", "pedidoEmp"))
{
    @Html.ValidationSummary(true, "Please fix the following errors.")
    <center>
        <div class="form-group">
            @Html.LabelFor(m => m.empleadoId)
            @Html.DropDownListFor(m => m.empleadoId, new SelectList(Model.verEmp, "empleadoId", "Nombre"), "", new { @class = "form-control" })
            @Html.ValidationMessageFor(m => m.empleadoId)
        </div>
    </center>

,列表是

@for (var i = 0; i < Model.verMenu.Count; i++)
    {
        <tr>

            <td>
                    @Html.HiddenFor(menuId => Model.verMenu[i].MenuId)

                @Html.DisplayFor(sopa => Model.verMenu[i].Sopa)
            </td> 

。 。

  <div class="form-group">

                        @for (var o = 0; o < Model.opMenuVer.Count; o++)
                        {
                            if (Model.opMenuVer[o].MenuId == Model.verMenu[i].MenuId)
                            {
                                @Html.CheckBox("OpcionId", new { value = Model.opMenuVer[o].OpcionId })
                                @Html.Label(Model.opMenuVer[o].Nombre)
                                @Html.ValidationMessageFor(m => Model.opMenuVer[o].OpcionId)
                            }
                        }

                    </div>
</td>
        </tr>
    }
            </tbody>
        </table>
        @Html.AntiForgeryToken()
        <button type="submit" class="btn btn-primary">Guardar</button>
    }

在我的控制器中,httppost我尝试做这样的事情

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Guardar(int idEmp, List<int> menusId, List<int> opsId)
        {
            List<PedidoXEmpleados> pedido = new List<PedidoXEmpleados>(); 
            if (!ModelState.IsValid)
            {
                return View("agregarMenu");
            }
            for (int i = 0; i < menusId.Count; i++)
            {
                pedido[i].estadoPedido = true;
                pedido[i].EmpleadoId = idEmp;
                pedido[i].MenuId = menusId[i];
                pedido[i].OpcionId = opsId[i];
                _conBd.PedidoXEmpleados.Add(pedido[i]);
            }

            _conBd.SaveChanges();
            return RedirectToAction("Index");
        }

非常感谢,我尝试搜索其他部分,但我找不到有用的东西,当我尝试项目时告诉我这个,“参数字典包含参数'idEmp'的非空条目可空类型“。

2 个答案:

答案 0 :(得分:0)

我认为最好的方法是创建一个viewModel,其中包含int和2列表的属性。然后使用此viewModel作为视图的模型,并将值传递给控制器​​中的模型。这个类不应该有Id属性或DbSet。

答案 1 :(得分:0)

首先,您的参数名称应与您的属性名称相匹配,并对代码进行这些更改

@Html.DropDownList("idEmp", new SelectList(Model.verEmp, "empleadoId", "Nombre"), "", new { @class = "form-control" })

@Html.CheckBox("opsId", new { value = Model.opMenuVer[o].OpcionId })

@Html.Hidden("menusId",Model.verMenu[i].MenuId)