2010-12-10 32 views
51

Tôi có một phần của chế độ xem được hiển thị qua RenderAction gọi hành động con. Làm thế nào để tôi có được Bộ Điều Khiển và Hành Động của Phụ Huynh từ bên trong Hành Động Trẻ Em này.Làm cách nào để có bộ điều khiển và hành động hiện tại từ bên trong Hành động con?

Khi tôi sử dụng ..

@ViewContext.RouteData.Values["action"] 

tôi lấy lại tên của hành động trẻ em nhưng những gì tôi cần là Phụ Huynh/Kêu gọi hành động.

Cảm ơn

BTW Tôi đang sử dụng MVC 3 với Dao cạo.

Trả lời

70

Và nếu bạn muốn truy cập này từ bên trong hành động con riêng của mình (chứ không phải là quan điểm), bạn có thể sử dụng

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

Sử dụng mô hình ràng buộc để nhận tên hành động, tên bộ điều khiển hoặc bất kỳ giá trị url nào khác:

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

Nếu phần bên trong một phần khác, điều này sẽ không hoạt động trừ khi chúng tôi tìm thấy nội dung chế độ xem gốc nhiều nhất. Bạn có thể tìm thấy nó với điều này:

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

Nó đã giúp tôi rất nhiều cổ vũ giao phối! –

1

tôi đã cùng một vấn đề và đưa ra cùng một giải pháp như Carlos Martinez, ngoại trừ tôi biến nó thành một phần mở rộng:

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

Tôi hy vọng điều này sẽ giúp người khác những người có cùng một vấn đề.

Các vấn đề liên quan