Dans mon projet MVC5, je veux créer un menu dans une vue partielle. Ce menu est dynamique dans le sens où il est construit à partir du contenu de ma base de données. J'ai donc un contrôleur qui s'occupe de créer mon menu et de retourner le modèle de menu à ma vue partielle:
public PartialViewResult GetMenu()
{
MenuStructuredModel menuStructuredModel = menuBusiness.GetStructuredMenu();
return PartialView("~/Views/Shared/MenuPartial", menuStructuredModel);
}
Dans ma vue partielle appelée MenuPartial Je veux utiliser le rasoir pour parcourir mes éléments de menu, comme:
@model MyApp.Models.Menu.MenuStructuredModel
<div class="list-group panel">
@foreach (var category in Model.ViewTypes[0].Categories)
{
<a href="#" class="list-group-item lg-green" data-parent="#MainMenu">@category.ShownName</a>
}
</div>
Maintenant, le problème est la vue dans laquelle j'insère la vue partielle. Si, selon moi, je fais simplement:
@Html.Partial("MenuPartial")
Il n'appellera pas le contrôleur pour remplir d'abord le modèle avec des données. Ce que je veux, c'est laisser le contrôleur retourner le partiel. Mais je ne sais pas comment faire cela de la vue. En pseudo code, je voudrais faire quelque chose comme:
@Html.RenderPartialFromController("/MyController/GetMenu")
Grâce à Stephen Muecke et Erick Cortorreal, je l'ai fait fonctionner.
Voici à quoi devrait ressembler le contrôleur:
[ChildActionOnly]
public PartialViewResult GetMenu()
{
MenuStructuredModel menuStructuredModel = menuBusiness.GetStructuredMenu();
return PartialView("~/Views/Shared/MenuPartial", menuStructuredModel);
}
Et ça peut s'appeler comme:
@Html.Action("GetMenu", "Home")
(Par conséquent GetMenu()
est déclarée dans le HomeController
dans mon exemple).
Le contrôleur est maintenant appelé (et le modèle est rempli) avant le rendu de la vue partielle.
Vous devez utiliser: @ Html.RenderAction Ou @ Html.Action