Eu criei um aplicativo MVC5 de três camadas queusa EF6. Separei a aplicação em BL (camada de negócios), DL (camada de dados) e camadas de apresentação. Posso implementar BL e DL com sucesso. No entanto, não consegui recuperar dados de BL e exibi-los nas visualizações.
Aqui está o que tentei fazer:
//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);
}
e aqui está o que eu experimentei na vista
@model List<AppTracker.Models.Apps>
@{
ViewBag.Title = "Index";
}
<h2>App Tracker</h2>
@foreach(var m in Model)
{
<div>m.Name</div>
}
No entanto, ele lança a seguinte exceção:
O item de modelo passado para o dicionário é do tipo "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] ".
Onde eu me perdi?
Respostas:
1 para resposta № 1Portanto, é o caso de passar o modelo errado para a visualização ou fazer referência ao modelo errado na visualização.
O item de modelo passado para o dicionário é dedigite "System.Collections.Generic.List1 [AppTracker.BL.AppData]", mas este dicionário requer um item de modelo do tipo "System.Collections.Generic.List1 [AppTracker.Models.Apps]".
A mensagem diz que você passou o seguinte para a vista
System.Collections.Generic.List1 [AppTracker.BL.AppData]
Mas a visão, conforme mostrado no código, requer
System.Collections.Generic.List1 [AppTracker.Models.Apps]
obrigado
p.s pensei em dar uma resposta oficial.
0 para resposta № 2
Você passa List<AppData>
do controlador para a visualização, mas o modelo (que você deseja mostrar) na visualização é diferente (List<Apps>
) Isso cria o problema.
Você só pode mostrar o modelo na vista que você passa do controlador.