2010-12-10 36 views
51

我有一部分視圖是通過RenderAction調用一個子動作呈現的。我如何從這個子操作中獲得父控制器和操作。如何從兒童動作中獲取當前的控制器和動作?

當我使用..

@ViewContext.RouteData.Values["action"] 

我找回兒童行動的名字,但我需要的是家長/呼叫行動。

感謝

順便說一句,我使用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

它幫助我很多歡呼隊友! – 2015-05-14 09:03:31

1

我有同樣的問題,並用相同的溶液卡洛斯·馬丁內斯來了,除了我把它變成一個擴展:

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

我希望這會幫助別人誰有同樣的問題。

相關問題