Create ASP.NET MVC Admin Area For Your App In 10 LOC
Like most people, I'm looking forward to the addition of Areas in ASP.NET MVC 2. The main reason is so I can neatly put my admin area in a group like this example:
http://myapp.com/admin/documents/list
http://myapp.com/admin/accounts/edit/1
http://myapp.com/accounts/list/1
Until V2 is released, MVC doesn't have a default way of having this grouping of controllers. I wanted a simple 1-minute way of achieving this in MVC 1. The best way I could figure out is this:
Add these 9 lines of code to your app
public class AdminRouteHandler : IRouteHandler { public IHttpHandler GetHttpHandler(RequestContext requestContext) { RouteData routeData = requestContext.RouteData; routeData.Values["controller"] = "Admin" + requestContext.RouteData.GetRequiredString("controller"); return new MvcHandler(requestContext); } }
Add a new route in your Global.asax.cs
routes.Add( "AdminRoutes", // Route name new Route( "Admin/{controller}/{action}/{id}", // URL with parameters new RouteValueDictionary(new { controller="Video", action = "Index", id=""}), new AdminRouteHandler()) // Parameter defaults );
Tada! You're done! There's one catch...
Controllers in the Admin area must start with the "Admin" prefix.
You then create appropriate folders for views as usual.
This is a bit of a hack, but I like the fact that it requires very little code and it's very simple :) Also, it would be very easy to tweak this code to allow for general partitioning of controllers by prefix, so you could have a "Admin" area, a "Mobile" area etc.
P.S: If you want a more complex solution that doesn't require you to use my controller naming convention, try this one.