Getting current controller & action from within pa

2019-01-31 09:11发布

问题:

I'm using the following to get the current controller and action in asp.net MVC3:

var currentAction = routeData.GetRequiredString("action");
var currentController = routeData.GetRequiredString("controller");

This works perfectly. However, if I call this from within a partial view that is called from my layout, "Layout" is returned as the current controller. This is of course correct behaviour, but is there any way to access the parent controller's name?

Edit for further clarification:

I am calling my menu controller and partial view from within _Layout.cshtml:

@Html.Action("Menu", "Layout")

Then from within that Menu partial view, I am calling code which returns the current action and controller.

回答1:

After your updated question and showing your code it is much more clear: you are not including a partial view. You are calling a child action. There's a huge difference between Html.Partial and Html.Action. So if you want to get the parent context inside this child action you could do this:

public ActionResult Menu()
{
    var rd = ControllerContext.ParentActionViewContext.RouteData;
    var currentAction = rd.GetRequiredString("action");
    var currentController = rd.GetRequiredString("controller");
    ...
    return View();
}


回答2:

I stumbled on this page looking for a way to access the parent controllers name after a call using Partial

@Html.Partial("Paging")

This can be done in the partial view as

@{
    var controller = ViewContext.RouteData.GetRequiredString("controller");
    var action = ViewContext.RouteData.GetRequiredString("action");
}