MVC has let you add Areas to your web project for a couple versions now. Areas help you group large chunks of code in your web app. You can group along a technical axes (like "Api") or a functional axes (like "Admin").
The first error
I created a new MVC4 project, added an area called "Test", and browsed to the home page (http://localhost:59669). Works! Then I browse to the new area (http://localhost:59669/Test) and get this:
![]()
What's going on with those underscores? The error message shows the problem is in my Web.config, but not the application root one, the one under /Areas/Test/Views/Web.config. I open it in Visual Studio, and sure enough, underscores.
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=__WebPagesVersion__.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=__WebPagesVersion__.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=__WebPagesVersion__.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
I compare that to the other Web.config under the root /Views/Web.config, and copy and paste those values in.
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
At this point, I'm assuming there is a bug in the "Add Area" template. So let's build and refresh the browser and it should work now, right?
The second error
Of course not.
![]()
Hmm. Lots of details in that stack trace, but not much to go on here. I checked my route registration code and checked my area registration code. Both looked fine:
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication2.App_Start
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional},
namespaces: new[] { "MvcApplication2.Controllers" }
);
}
}
}
using System.Web.Mvc;
namespace MvcApplication2.Areas.Test
{
public class TestAreaRegistration : AreaRegistration
{
public override string AreaName
{
get { return "Test"; }
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
name: "Test_default",
url: "Test/{controller}/{action}/{id}",
defaults: new {action = "Index", id = UrlParameter.Optional},
namespaces: new[] {"MvcApplication2.Areas.Test.Controllers"}
);
}
}
}
I also added the namespaces to the area (the last parameter above) to help the routing engine find the right controller. That looked fine, too.
The error message was about a bad assembly ("The given assembly name or codebase was invalid."). Maybe something didn't get built or loaded right ? I tried a Clean and Rebuild. No luck.
Maybe ASP.NET temp files were cached? Let's clear browser cache, close and re-open the browser, close and re-open Visual Studio, restart IIS Express, and see if that helps….and no, no luck.
The solution
I was running out of ideas, but since the first problem was the Web.config, maybe this was, too. I opened up the generated Web.config under /Areas/Test/Views/Web.config again and compared it to the one under the root /Views/Web.config.
Sure enough, more freaking underscores. I just copied ALL the values from the root view's Web.config into the areas one, built, refreshed, and finally got the areas showing up.
Maybe I have a wacky install. Maybe I got hold of some bad pre-release NuGet package. But it seems there is a template bug here when adding Areas to an MVC project. I have the Fall Update on Visual Studio 2012, so my About screen looks like this:
![]()
I'm writing this up in the hopes that I save someone else some time. If you have suggestions on where I got an underscore happy template, please let me know in the comments below.