2016-03-25 15 views
0

Das Problem ist sehr einfach :)mvc5 icollection immer null

Ich habe zwei Modelle Eltern und Kind. Das Elternmodell enthält eine Sammlung von Kindern. Der Punkt ist, dass ich Kinder sehen kann, aber ich kann sie nicht speichern. Ich habe viele Stunden damit verbracht, dieses Problem zu lösen. Jede Hilfe wird sehr geschätzt.

Eltern Modell

namespace WebApplication1.Models 
{ 
    public class Parent 
    { 
     //public Parent() 
     //{ 
     // Child = new Collection<Child>(); 
     //} 

     public int ParentId { get; set; } 
     public string ZmiennaParent1 { get; set; } 

     public ICollection<Child> Child { get; set; } 
    } 
} 

Kindermodell:

namespace WebApplication1.Models 
{ 
    public class Child 
    { 
     public int ChildId { get; set; } 
     public string ZmiennaChild1 { get; set; } 

     public int ParentId { get; set; } 
     public virtual Parent Parent { get; set; } 
    } 
} 

meiner Sicht:

@for (int i = 0; i < Model.Child.Count(); i++) 
{ 
    @Html.EditorFor(model => Model.Child.ElementAt(i).ZmiennaChild1, new { htmlAttributes = new { @class = "form-control" } }) 
} 

und mein Controller:

// GET:/Eltern/Edit/5 Öffentliches ActionResult Edit (int? id) { if (id == null) { Rückgabe neuer HttpStatusCodeResult (HttpStatusCode.BadRequest); }

var parent = db.Parents.Include(u => u.Child).SingleOrDefault(u => u.ParentId == id); 

    if (parent == null) 
    { 
     return HttpNotFound(); 
    } 
    return View(parent); 
} 

// POST: /Parent/Edit/5 
// To protect from overposting attacks, please enable the specific properties you want to bind to, for 
// more details see http://go.microsoft.com/fwlink/?LinkId=317598. 
[HttpPost] 
[ValidateAntiForgeryToken] 
//public ActionResult Edit(Parent parent) 
public ActionResult Edit([Bind(Include="ParentId,ZmiennaParent1, Children")] Parent parent) 
{ 
    if (ModelState.IsValid) 
    { 
     if (parent.Child != null) 
     { 
      foreach (Child element in parent.Child) 
      { 
       db.Entry(element).State = EntityState.Modified; 
      } 
      db.SaveChanges(); 
     } 

     db.Entry(parent).State = EntityState.Modified; 
     db.SaveChanges(); 

     return RedirectToAction("Index"); 
    } 
    return View(parent); 
} 

Ich werde sehr für jede Hilfe dankbar sein:/Wie ich der Punkt geschrieben habe, ist, dass ich in der Lage Kinder im Zusammenhang mit angezeigt werden, aber nicht in der Lage, sie zu bearbeiten.

+1

Warum hast du das mit asp-classic markiert, ich sehe hier keine klassische asp. –

Antwort

0

Es gibt keine Kinder Eigenschaft auf Parent, gibt es eine Child-Eigenschaft. Aber das Binding-Attribut sagt Kinder. Ändere das Attribut zu ...

+0

DAS IST ES !!! ICH DANKE DIR SEHR !!! Ich habe 5,5 Stunden damit verbracht, dieses Problem zu lösen !!! : D: D: D – Blue

+0

Entschuldigung, ich kann in diesem Moment nicht abstimmen Ich denke, dass meine Stimme zählt ... :( – Blue