Как получить текущий контроллер и действие внутри действия ребенка?
У меня есть часть моего представления, которая отображается с помощью RenderAction вызова дочернего действия. Как я могу получить Родительский контроллер и действие изнутри этого дочернего действия.
когда я использую..
@ViewContext.RouteData.Values["action"]
Я возвращаю имя дочернего действия, но мне нужно родительское/вызывающее действие.
спасибо
кстати я использую MVC 3 с бритвой.
5 ответов:
и если вы хотите получить доступ к этому внутри себя ребенка (а не смотреть) вы можете использовать
ControllerContext.ParentActionViewContext.RouteData.Values["action"]
нашли его...
how-do-i-get-the-routedata-associated-with-the-parent-action-in-a-partial-view
ViewContext.ParentActionViewContext.RouteData.Values["action"]
Если частичное находится внутри другого частичного, это не будет работать, если мы не найдем самое верхнее содержимое родительского представления. Вы можете найти его с помощью этого:
var parentActionViewContext = ViewContext.ParentActionViewContext; while (parentActionViewContext.ParentActionViewContext != null) { parentActionViewContext = parentActionViewContext.ParentActionViewContext; }
У меня была та же проблема, и я придумал то же решение, что и Карлос Мартинес, за исключением того, что я превратил его в расширение:
public static class ViewContextExtension { public static ViewContext TopmostParent(this ViewContext context) { ViewContext result = context; while (result.ParentActionViewContext != null) { result = result.ParentActionViewContext; } return result; } }
Я надеюсь, что это поможет другим, кто имеет ту же проблему.
используйте привязку модели, чтобы получить имя действия, имя контроллера или любые другие значения 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); }