2016-04-21 8 views
1

Ich habe ein Modell (so genannte Plan), der eine seiner Eigenschaften ist eine Liste (ICollection) von Übungen (das ist ein anderes Modell):Schleife von Kontrollkästchen Objekte hinzufügen Liste modellieren

public int Id { get; set; } 
public virtual ICollection<Exercise> Exercises { get; set; } 

Also habe ich versucht, um eine Ansicht zu erstellen, die einen Plan und eine andere Ansicht erstellt, um Übungen aus Übungen in der Datenbank zum Plan hinzuzufügen. Also habe ich eine Schleife gemacht, die alle Übungen aus der DB und für jeden einzelnen habe ich ein Kontrollkästchen mit und ID wie die ID der Übung und ich dachte, ich könnte etwas damit tun, aber ich habe so viele Dinge und Wege und ich konnte nicht einmal die Eingabe der Kontrollkästchen an den Controller senden. Ich muss sagen, dass ich mit Programmierung mit mvc irgendwie neu bin und ich versuchte, über das Internet zu schauen, und ich kannte Leute wirklich nicht, die programmieren können, so ist das wirklich meine letzte Chance, es zu lösen. Sorry, wenn es ein langer Post oder zu einfach für dich war, um Kommentare abzugeben, aber ich brauche das wirklich.

Dies ist sehr spezifisch für mein Projekt und was ich stapelte, war die Eingabe an den Controller zu senden, aber ich bin offen für verschiedene Lösungen, weil ich verzweifelt bin.

public async Task<ActionResult> AddExercises(string id,int[] selectedExercises) 
{ 
    List<Exercise> list = new List<Exercise>(); 
    foreach (int i in selectedExercises) 
    { 
     list.Add(db.Exercises.Find(i)); 
    } 
    db.Plans.Find(id).Exercises = list; 
    await db.SaveChangesAsync(); 
    return RedirectToAction("index"); 
} 

Ich bin sicher, dass seine falschen und die Aussicht Ich habe versucht, ist:

@using (Html.BeginForm("index", "Plans")) 
{ 
    @Html.AntiForgeryToken() 
    foreach (var i in Model.Exercises) 
    { 
     <table class="table"> 
      <tr> 
       <td>@Html.DisplayFor(modelItem => i.Level)</td> 
       <td>@Html.DisplayFor(modelItem => i.Description)</td> 
       <td>@Html.DisplayFor(modelItem => i.MoreDescription)</td> 
       <td> 
        @Html.ActionLink("Edit", "Edit", new { id = i.Id }) | 
        @Html.ActionLink("Details", "Details", new { id = i.Id }) | 
        <input type="checkbox" class="selectedObjects" id="i.id" /> | 
       </td> 
      </tr> 
     </table> 
    } 
    @Html.ActionLink("Finish", "AddExercises") 
} 

I Ansichtsmodell PlanExercise in dieser Ansicht

Antwort

0

Ihre Kontrollkästchen haben weder ein name Attribut oder ein verwenden value Attribut so gibt es nichts zu übermitteln. Sie html braucht

<input type="checkbox" name="selectedExercises" value="@i.id" /> 

und dann sein, um das Formular zu abzuschicken, müssen Sie einen Submit-Button (entfernen @Html.ActionLink("Finish", "AddExercises"))

<input type="submit" value="Save" /> 

und die Form sein muss (die Steuerung unter der Annahme FinishController)

@using (Html.BeginForm("AddExercises", "Finish")) 

und die Methode muss mit dem Attribut [HttpPost] gekennzeichnet werden.

+0

Nun habe ich versucht, aber es scheint, dass, wenn ich das httppost-Attribut hinzufügen die Methode nicht einmal aufgerufen, so dachte ich es etwas über die Methode (zwischen den Klammern im Kopf der Methode) – Elad

+0

OK, bemerkte gerade Sie Form ist auch falsch - es muss '@ using sein (Html.BeginForm (" AddExercises "," Finish "))' (vorausgesetzt, Ihr Controller heißt 'FinishConroller') –

+0

Ja, Sie hatten Recht, aber jetzt sagt es mir, dass es ein Problem darin gibt Linie: foreach (int guid in ausgewählten Übungen) – Elad

Verwandte Themen