如何从子动作中获取当前控制器和动作?

发布于 2024-10-07 09:13:19 字数 221 浏览 6 评论 0原文

我的视图的一部分是通过调用子操作的 RenderAction 呈现的。如何从该子操作中获取父控制器和操作。

当我使用..时,

@ViewContext.RouteData.Values["action"]

我取回子操作的名称,但我需要的是父/调用操作。

谢谢

顺便说一句,我正在使用 MVC 3 和 Razor。

I have a portion of my view that is rendered via RenderAction calling a child action. How can I get the Parent controller and Action from inside this Child Action.

When I use..

@ViewContext.RouteData.Values["action"]

I get back the name of the Child Action but what I need is the Parent/Calling action.

Thanks

BTW I am using MVC 3 with Razor.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

人生百味 2024-10-14 09:13:19

如果您想从子操作本身(而不是视图)访问它,您可以使用

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

And if you want to access this from within the child action itself (rather than the view) you can use

ControllerContext.ParentActionViewContext.RouteData.Values["action"] 
嘴硬脾气大 2024-10-14 09:13:19

找到了...

我如何获取与部分视图中的父操作关联的路由数据

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

Found it...

how-do-i-get-the-routedata-associated-with-the-parent-action-in-a-partial-view

ViewContext.ParentActionViewContext.RouteData.Values["action"]
眼趣 2024-10-14 09:13:19

如果该部分位于另一个部分内,则除非我们找到最顶层的父视图内容,否则这将不起作用。你可以用这个找到它:

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

If the partial is inside another partial, this won't work unless we find the top most parent view content. You can find it with this:

var parentActionViewContext = ViewContext.ParentActionViewContext;
while (parentActionViewContext.ParentActionViewContext != null)
{
    parentActionViewContext = parentActionViewContext.ParentActionViewContext;
}
病毒体 2024-10-14 09:13:19

我遇到了同样的问题,并提出了与卡洛斯·马丁内斯相同的解决方案,只是我把它变成了扩展:

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

我希望这能帮助其他有同样问题的人。

I had the same problem and came up with same solution as Carlos Martinez, except I turned it into an extension:

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

I hope this will help others who have the same problem.

百合的盛世恋 2024-10-14 09:13:19

使用模型绑定来获取操作名称、控制器名称或任何其他 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);
}    

Use model binding to get the action name, controller name, or any other url values:

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);
}    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文