2017-04-04 2 views
1

ich bin neu mit asp.net und mvc, ich versuche, ein int, eine Liste von int aus einem anderen Objekt und andere Liste von Ints von einem anderen Objekt, mit einem Formular zu senden.kann ich verschiedene Objekte in einem httppost in mvc einfügen?

für Einsatz meiner Sicht der 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> 

und die Liste sind

@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> 
    } 

in meinem Controller die Httppost ich versuche, etwas zu tun, wie dies

[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"); 
     } 

vielen Dank, ich versuche, für andere Teile zu suchen und ich habe nicht etwas, das ich funktioniert, wenn probiere das Projekt zeige mir folgendes: "Das Parameterwörterbuch enthält einen Nulleintrag für den Parameter 'idEmp' vom Typ" nicht nullbar ".

+1

Da Ihr keinen Wert für 'idEmp' in der Anfrage zu senden. (aber Sie haben eine namens 'empleadoId') –

+0

Vielen Dank stephen, ich ändere es und funktioniert. :) –

Antwort

0

zunächst alle Namen Ihrer Parameter sollten die Namen Ihrer Eigenschaften entsprechen und tun, um diese Änderungen an Ihrem Code

@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) 
+0

Vielen Dank, ich mache diese Änderungen in der Checkbox und versteckt und funktioniert. thaaanks. –

0

Ich denke, der beste Weg ist ein ViewModel mit Eigenschaften für die Int und die 2 Listen zu erstellen. Verwenden Sie dann dieses viewModel als Modell der Ansicht und übergeben Sie die Werte an die Modelle im contoller. Diese Klasse sollte keine Id-Eigenschaft oder DbSet haben.

Verwandte Themen