2017-05-04 4 views
0

Für mein Web-App-Projekt habe ich zwei Modelle, die miteinander verwandt sind. Modellabteilung ist verwandt mit Model Employee. Jeder Mitarbeiter ist einer Abteilung zugeordnet, während jede Abteilung viele Mitarbeiter haben kann. In der Ansicht Abteilungen habe ich die Option "Neuen Mitarbeiter hinzufügen". Wenn auf die Schaltfläche zum Hinzufügen eines neuen Mitarbeiters geklickt wird, wird ein modales Popup angezeigt, das die Ansicht Mitarbeiter/Erstellen anzeigt. Mein Problem ist, dass ich nicht weiß, wie man Mitarbeiter mit der Abteilung verbindet, so dass der Mitarbeiter automatisch zur Abteilungsansicht neben der richtigen Abteilung hinzugefügt wird.2 verschiedene Modelle - wie verbinde ich sie in MVC 5?

Momentan gibt meine Employee/Create-Ansicht dem Benutzer nur eine Dropdown-Liste mit Abteilungen, mit denen der Mitarbeiter verknüpft werden kann. Ich möchte, dass der Mitarbeiter automatisch mit der Abteilung verknüpft wird, wenn die Option "Mitarbeiter hinzufügen" in der Ansicht Abteilungen angezeigt wird.

Hier ist das Department Modell:

public class Department 
{ 
    [Key] 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public string BuildingLocation { get; set; } 
    public string DirectLine { get; set; } 
    public virtual ICollection<Employee> Employees { get; set; } 

} 

Hier ist das Mitarbeitermodell:

public class Employee 
    { 
     [Key] 
     public int EmployeeID { get; set; } 
     [ForeignKey("Department")] 
     public int DepartmentID { get; set; } 
     public string EmployeeFirstName { get; set; } 
     public string EmployeePosition { get; set; } 
     public string EmployeePhoneNo { get; set; } 
     public string EmployeeEmail { get; set; } 
     public virtual Department Department { get; set; } 
    } 

Antwort

1

Ich glaube, Sie einen EmployeeViewModel erstellen können. Zum Beispiel:

public class Employee 
    {   
     public int EmployeeID { get; set; }   
     public int DepartmentID { get; set; } 
     public string EmployeeFirstName { get; set; } 
     public string EmployeePosition { get; set; } 
     public string EmployeePhoneNo { get; set; } 
     public string EmployeeEmail { get; set; } 
     public SelectListItem DepartmentList { get; set; }   
    } 

Wenn Sie klicken neuen Mitarbeiter hinzufügen, setzen nur DepartmentId = DepartmentId dass Sie ausgewählt haben. Oder Sie können den Benutzer Departement ändern lassen.

+0

Können Sie dies stattdessen in ein Abteilungsansichtsmodell ändern? Die Ansicht Abteilungen ist die Hauptansicht. –

+1

@VyNguyen: Ja. Sie brauchen nur ein Modell für alle, mein Freund :)) – Tomato32

+0

Was soll ich verwenden, um die Mitarbeiter im Department View Model zu speichern? Liste? ICollektion? –

0

Sie können ein ViewModel wie folgt erstellen. Wann immer Sie Mitarbeiterdetails in der Ansicht anzeigen möchten, dann ordnen Sie Ihre Daten diesem Ansichtsmodell zusammen mit "DepartmentID" und "DepartmentName" zu. Um "DepartmentName" zu erhalten, können Sie sich der Abteilungstabelle anschließen und den Abteilungsnamen erhalten.

public class EmployeeViewModel 
{ 
    public int EmployeeID { get; set; } 
    public string EmployeeFirstName { get; set; } 
    public string EmployeePosition { get; set; } 
    public string EmployeePhoneNo { get; set; } 
    public string EmployeeEmail { get; set; } 

    public int DepartmentID { get; set; } 
    public string DepartmentName { get; set; } 
    public virtual Department Department { get; set; } 
} 

Um Abteilungsname zu erhalten, können Sie mit Employee Tabelle wie folgt verbinden. (Beachten Sie, dass ich hier EntityFramework zum Abrufen von Daten verwendet habe)

var employeeList = from e in dbContext.Employees 
      join d in dbContext.Departments on e.DepartmentID equals d.DepartmentID 
      select new EmployeeViewModel 
      { 
       EmployeeID = e.EmployeeID, 
       EmployeeFirstName = e.EmployeeFirstName, 
       EmployeePosition = e.EmployeePosition, 
       EmployeePhoneNo = e.EmployeePhoneNo, 
       EmployeeEmail = e.EmployeeEmail, 
       EmployeePhoneNo = e.Name, 

       DepartmentID = e.DepartmentID, 
       DepartmentName = d.DepartmentName 
      }; 
Verwandte Themen