web-dev-qa-db-fra.com

Comment obtenir le contrôleur et l'action actuels de l'action Child?

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.

55
JBeckton

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"] 
73
Rupert Bates

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"]
22
JBeckton

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;
}
17
Carlos Martinez T

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.

1
jahu

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);
}    
0
Lucent Fox