Stworzyłem tę trójwarstwową aplikację MVC5używa EF6. Rozdzieliłem aplikację na BL (warstwa biznesowa), DL (warstwa danych) i warstwy prezentacji. Mogę z powodzeniem zaimplementować BL i DL. Nie mogłem jednak pobrać danych z BL i wyświetlić ich w widokach.
Oto, co próbowałem zrobić:
//on the controller
public ActionResult Index()
{
TrackerBL t = new TrackerBL(); //BL
var model = t.GetApps(); //method on my BL that returns a list
return View(model);
}
i oto, co próbowałem na widoku
@model List<AppTracker.Models.Apps>
@{
ViewBag.Title = "Index";
}
<h2>App Tracker</h2>
@foreach(var m in Model)
{
<div>m.Name</div>
}
Zgłasza jednak następujący wyjątek:
Element modelu przekazany do słownika jest typu „System.Collections.Generic.List
1[AppTracker.BL.AppData]", but this dictionary requires a model item of type "System.Collections.Generic.List
1 [AppTracker.Models.Apps] ”.
Gdzie się zgubiłem?
Odpowiedzi:
1 dla odpowiedzi № 1Jest to przypadek przekazania niewłaściwego modelu do widoku lub odniesienia do niewłaściwego modelu w widoku.
Elementem modelu przekazanym do słownika jestwpisz „System.Collections.Generic.List1 [AppTracker.BL.AppData]”, ale ten słownik wymaga elementu modelu typu „System.Collections.Generic.List1 [AppTracker.Models.Apps]”.
Komunikat mówi, że przekazałeś poniżej widok
System.Collections.Generic.List1 [AppTracker.BL.AppData]
Ale widok, jak pokazano w kodzie, wymaga
System.Collections.Generic.List1 [AppTracker.Models.Apps]
Dzięki
p.s Pomyślałem, że dam oficjalną odpowiedź.
0 dla odpowiedzi nr 2
Mijasz List<AppData>
od kontrolera do widoku, ale model (który chcesz pokazać) w widoku jest inny (List<Apps>
). To sprawia problem.
Możesz pokazać model tylko w widoku, który przekazujesz z kontrolera.