I\'ve a SuperController which will be inherited from all the controllers. In the constructor I\'m trying to populate the ViewData using the ControllerN
Don't use ViewData. Use this in your Site.Master instead:
<%= ViewContext.RouteData.Values["Controller"] %>
<%= ViewContext.RouteData.Values["Action"] %>
SO - Getting the name of the controller and action method in the view in ASP.Net MVC
Assuming that I'm reading your post correctly, and you're not trying to access the controller/action names in the view, but INSTEAD trying to do something with them, and put the result into the viewdata:
You can't do it in the constructor because the context hasn't been created yet. You need to override the Initialize method:
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
base.Initialize(requestContext);
//here the routedata is available
ViewData["controller_name"] = (ControllerContext.RouteData.Values["Controller"];
}
(Note that you could pass in just the ControllerContext.RouteData to your function and let it pick the values it needs.)
I needed to get at these alot from views, and I hit it from a slightly different angle--I wrote a few extension methods to HtmlHelper to give the current ControllerName and ActionName. A bit easier to handle as you don't need to worry about diving into the ViewData[] bag or injecting stuff at appropriate places.
Try this:
RouteData.Values.First().Value.ToString()