2016-07-20 4 views
0

Ich habe ein Modell Klassenzimmer, die eine Reihe von Einschreibungen, die eine Reihe von Komponenten und Komponenten haben eine Reihe von Unterkomponenten haben. (Ich weiß, es kann verwirrend sein und vielleicht nicht der beste Weg)Redirect mit unterschiedlicher ID nach dem Erstellen MVC 4

public class Classroom 
    { 
     ... 
     public virtual List<Enrollment> Enrollments { get; set; } 
} 
public class Enrollment 
    { 
     ... 
     public virtual int ClassroomId { get; set; } 
     public virtual Classroom Classroom { get; set; } 
     public virtual List<Components> Components { get; set; } 
     } 
public class Component 
    { 
     ... 
     public virtual int EnrollmentId { get; set; } 
     public virtual Enrollment Enrollment{ get; set; } 
     public virtual List<Subcomponent> Subcomponents { get; set; } 
} 
public class Subcomponent 
    { 
     ... 
     public virtual int ComponentId { get; set; } 
     public virtual Component Component{ get; set; } 
} 

In Hinblick auf der Einschreibung ich eine Tabelle haben die Subkomponenten der Komponenten und in der Zukunft zu zeigen. Nach dem Erstellen einer Unterkomponente muss ich mit der entsprechenden Registrierungs-ID zu dieser Registrierungsansicht umleiten. Ich habe diesen Code:

public ActionResult CreateSubcomponent(Subcomponent subcomponent) 
     { 
      if (ModelState.IsValid) 
      { 
       db.Subcomponents.Add(subcomponent); 
       db.SaveChanges(); 
       return RedirectToAction("View", "Enrollment", new { id = ??? }); 
      } 
... 
} 

Meine Frage ist, wie kann ich es tun? Wie kann ich die ID von der Registrierung erhalten? Muss ich den Code ändern, und wenn ja, wie? Danke

+0

Holen Sie sich das 'Component' basierend auf' subcomponent.ComponentId' und dann seine get 'EnrollmentId' –

Antwort

0

Um eine SubComponent zu speichern, müssen Sie die ComponentId speichern, da es sich um einen Fremdschlüssel handelt. Das bedeutet, dass Sie die ComponentId in Ihrer Aktionsmethode haben sollten. Sie sollten die Datenbank abfragen, um den Komponentendatensatz für diese ComponentId abzurufen, und die Enrollment-Eigenschaft dieser Entität verwenden.

public ActionResult CreateSubcomponent(Subcomponent subcomponent) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Subcomponents.Add(subcomponent); 
     db.SaveChanges(); 

     var c=db.Components.FirstOrDefault(s=>s.Id=subComponent.ComponentId); 
     var enrollmentId = c.EnrollementId; 
     return RedirectToAction("View", "Enrollment", new { id = enrollmentId }); 
    } 
    // to do : return something 
} 
+1

es funktionierte, danke! – dasdasd