2010-12-10 3 views
51

У меня есть часть моего представления, которое визуализируется с помощью RenderAction, вызывающего дочернее действие. Как я могу получить родительский контроллер и действие из этого Child Action.Как получить текущий контроллер и действие изнутри действия ребенка?

Когда я использую ..

@ViewContext.RouteData.Values["action"] 

я возвращусь имя ребенка действий, но то, что мне нужно, это Родитель/Вызов действия.

Благодаря

BTW Я использую MVC 3 с бритвой.

ответ

70

И если вы хотите получить доступ к этому из самого (а не его) ребенка действия вы можете использовать

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

Используйте привязку модели для получения имени действия, имени контроллера или любых других значений 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

Если частичная часть находится внутри другого частичного, это не сработает, если мы не найдем верхнее большинство родительских представлений. Вы можете найти его с этим:

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

Это помогло мне много приветствовать помощника! –

1

У меня была та же проблема, и придумали же решение, как Карлос Мартинес, за исключением того, я включил его в расширение:

public static class ViewContextExtension 
{ 
    public static ViewContext TopmostParent(this ViewContext context) 
    { 
     ViewContext result = context; 
     while (result.ParentActionViewContext != null) 
     { 
      result = result.ParentActionViewContext; 
     } 
     return result; 
    } 
} 

Я надеюсь, что это поможет другим которые имеют ту же проблему.

Смежные вопросы