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.
In Solution Explorer, right-click the Controllers folder and then click Add, then Controller. In the Add Scaffold dialog box, click MVC 5 Controller with views, using Entity Framework, and then click Add.
ToString(); And this will return the name of the controller requested in the URL: var requestedController = HttpContext.
ControllerContext(ControllerContext) Initializes a new instance of the ControllerContext class by using the specified controller context. ControllerContext(HttpContextBase, RouteData, ControllerBase)
ASP.NET MVC 5 has arrived with a very important feature called Filter Overrides. Using the Filter Overrides feature, we can exclude a specific action method or controller from the global filter or controller level filter. ASP.NET MVC 5 has arrived with a very important feature called Filter Overrides.
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();
}
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");
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With