J'ai une partie de ma vue qui est rendue via RenderAction appelant une action enfant. Comment puis-je obtenir le contrôleur parent et l'action à l'intérieur de cette action enfant.
Quand j'utilise ..
@ViewContext.RouteData.Values["action"]
Je récupère le nom de l'action enfant mais ce dont j'ai besoin est l'action parent/appel.
Merci
BTW J'utilise MVC 3 avec Razor.
Et si vous souhaitez y accéder depuis l'action enfant elle-même (plutôt que la vue), vous pouvez utiliser
ControllerContext.ParentActionViewContext.RouteData.Values["action"]
Je l'ai trouvé ...
comment-je-obtenir-les-données-routées-associées-à-l'action-parent-dans-une-vue-partielle
ViewContext.ParentActionViewContext.RouteData.Values["action"]
Si le partiel se trouve dans un autre partiel, cela ne fonctionnera que si nous trouvons le contenu de la vue la plus parent. Vous pouvez le trouver avec ceci:
var parentActionViewContext = ViewContext.ParentActionViewContext;
while (parentActionViewContext.ParentActionViewContext != null)
{
parentActionViewContext = parentActionViewContext.ParentActionViewContext;
}
J'ai eu le même problème et j'ai trouvé la même solution que Carlos Martinez, sauf que je l'ai transformé en extension:
public static class ViewContextExtension
{
public static ViewContext TopmostParent(this ViewContext context)
{
ViewContext result = context;
while (result.ParentActionViewContext != null)
{
result = result.ParentActionViewContext;
}
return result;
}
}
J'espère que cela aidera ceux qui ont le même problème.
Utilisez la liaison de modèle pour obtenir le nom de l'action, le nom du contrôleur ou toute autre valeur d'URL:
routes.MapRoute("City", "{citySlug}", new { controller = "home", action = "city" });
[ChildActionOnly]
public PartialViewResult Navigation(string citySlug)
{
var model = new NavigationModel()
{
IsAuthenticated = _userService.IsAuthenticated(),
Cities = _cityService.GetCities(),
GigsWeBrought = _gigService.GetGigsWeBrought(citySlug),
GigsWeWant = _gigService.GetGigsWeWant(citySlug)
};
return PartialView(model);
}