development

자식 작업 내부에서 현재 컨트롤러 및 작업을 얻는 방법은 무엇입니까?

big-blog 2021. 1. 6. 20:44
반응형

자식 작업 내부에서 현재 컨트롤러 및 작업을 얻는 방법은 무엇입니까?


자식 작업을 호출하는 RenderAction을 통해 렌더링되는 뷰의 일부가 있습니다. 이 자식 액션 내부에서 부모 컨트롤러와 액션을 어떻게 얻을 수 있습니까?

내가 사용할 때 ..

@ViewContext.RouteData.Values["action"]

Child Action의 이름을 되찾았지만 필요한 것은 Parent / Calling 액션입니다.

감사

BTW 저는 Razor와 함께 MVC 3을 사용하고 있습니다.


뷰가 아닌 자식 작업 자체에서 액세스하려면 다음을 사용할 수 있습니다.

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

그것을 발견...

부분보기에서 부모 작업과 관련된 경로 데이터를 가져 오는 방법 (How-do-i-get-the-routedata-related-the-parent-action-in-a-partial-view)

ViewContext.ParentActionViewContext.RouteData.Values["action"]

부분이 다른 부분 안에 있으면 상위 뷰 콘텐츠를 찾을 때까지 작동하지 않습니다. 다음과 같이 찾을 수 있습니다.

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

나는 같은 문제가 있었고 Carlos Martinez와 같은 해결책을 찾았지만 그것을 확장 프로그램으로 바꿨습니다.

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

참조 URL : https://stackoverflow.com/questions/4412310/how-to-get-current-controller-and-action-from-inside-child-action

반응형