56 votes

Comment obtenir de l'actuel contrôleur et l'action à partir de l'intérieur de l'action Enfant?

J'ai une partie de ma vue, qui est rendu par RenderAction à l'appel d'une action enfant. Comment puis-je obtenir le contrôleur de Parent et de l'Action à l'intérieur de cette Action Enfant.

Lorsque j'utilise..

@ViewContext.RouteData.Values["action"]

Je rentre le nom de l'Enfant à l'Action, mais ce dont j'ai besoin est le Parent/l'Appel à l'action.

Merci

BTW, je suis en utilisant MVC 3 avec un Rasoir.

73voto

Rupert Bates Points 1690

Et si vous souhaitez accéder à partir des enfants dans l'action elle-même (plutôt que le point de vue) vous pouvez utiliser

ControllerContext.ParentActionViewContext.RouteData.Values["action"] 

22voto

JBeckton Points 2423

Trouvé...

how-do-i-obtenir-le-routedata-associés-avec-la-mère-de l'action-dans-un-affichage partiel

ViewContext.ParentActionViewContext.RouteData.Values["action"]

17voto

Carlos Martinez Points 3151

Si le partiel est à l'intérieur d'une autre partielle, cela ne fonctionnera pas à moins que nous trouvons le plus haut de la vue parente de contenu. Vous pouvez le retrouver avec ceci:

var parentActionViewContext = ViewContext.ParentActionViewContext;
while (parentActionViewContext.ParentActionViewContext != null)
{
    parentActionViewContext = parentActionViewContext.ParentActionViewContext;
}

1voto

J'ai eu le même problème et est venu avec la même solution que Carlos Martinez, sauf que je l'ai transformée en une 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 d'autres personnes qui ont le même problème.

0voto

Lucent Fox Points 620

L'utilisation de la liaison de modèle pour obtenir le nom de l'action, le nom du contrôleur, ou toute autre url de valeurs:

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);
}    

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X