2010-12-10 39 views

Répondre

70

Et si vous voulez accéder à ce à partir de l'action de l'enfant lui-même (plutôt que la vue), vous pouvez utiliser

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

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

Si le partiel est dans un autre partiel, cela ne fonctionnera que si nous trouvons le contenu de la vue parent le plus haut. Vous pouvez le trouver avec ceci:

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

Il m'a aidé beaucoup cheers mate! –

1

J'ai eu le même problème et est venu avec la même solution que Carlos Martinez, sauf que je tournais dans 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 les autres qui ont le même problème.