2013-04-05 11 views
5

Pracuję nad małym projektem, w którym mamy tabelę inżynierów, tabelę projektów i tabelę elementów. inżynierom przypisuje się wiele elementów, a elementy mogą mieć wiele projektów. Zastanawiałem się, w jaki sposób chciałbym pokazać wszystkie elementy, z których korzysta inżynier.ASP.NET MVC 4, wiele modeli w jednym widoku?

Obecnie mam utworzoną tabelę, która kojarzy inżyniera z elementem. Wygląda trochę tak:

[Engineer Elements] 
[Engineer ID][Element ID] 
    [1]   [2] 
    [1]   [4] 
    [2]   [2] 
    [2]   [8] 

Więc mam sposób na połączenie dwóch tabel. Czy mógłbyś popchnąć mnie we właściwym kierunku, ucząc się nieco więcej o łączeniu tabel przy użyciu MVC?

Odpowiedz

7

Jeżeli nie masz jeszcze widoku modelu do reprezentowania, wystarczy utworzyć jeden:

public class MyViewModel 
{ 
    public Engineer Engineer { get; set; } 
    public List<Element> Elements { get; set; } 
} 

Wypełnianie zestaw widzenia modeli w kontrolerze

public ActionResult MyAction() 
{ 
    var viewModels = 
     (from e in db.Engineers 
     select new MyViewModel 
     { 
      Engineer = e, 
      Elements = e.Elements, 
     }) 
     .ToList(); 
    return View(viewModels); 
} 

I tylko w widoku Podaj, że używasz kolekcji modeli widoków:

@model List<MyViewModel> 
@foreach(var vm in Model) 
{ 
    <h1>Projects for engineer: @vm.Engineer.Name</ha> 
    <ul> 
    @foreach(var ele in vm.Elements) 
    { 
     <li>@ele.Name</li> 
    } 
    </ul> 
} 
+0

Fajnie, podoba mi się. Jedną rzeczą jest użycie silnego wpisanego 'List', a nie' IEnumerable', ponieważ pętla może powodować wiele wyliczeń. Zmień to i dostałeś moje +1 :) – mattytommo

+0

Zarówno naprawdę, zachowaj spójność :) – mattytommo

+2

@mattytommo done :) –

Powiązane problemy