/ / Jak uzyskać dostęp do danych w 3-warstwowej aplikacji MVC5 przy użyciu EF6 - asp.net-mvc, entity-framework, asp.net-mvc-5

Jak uzyskać dostęp do danych w 3-warstwowej aplikacji MVC5 przy użyciu EF6 - asp.net-mvc, entity-framework, asp.net-mvc-5

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.List1[AppTracker.BL.AppData]", but this dictionary requires a model item of type "System.Collections.Generic.List1 [AppTracker.Models.Apps] ”.

Gdzie się zgubiłem?

Odpowiedzi:

1 dla odpowiedzi № 1

Jest 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.