注册具有MVC扩展的路由和区域时不显示MVC区域

时间:2012-05-23 10:29:46

标签: asp.net asp.net-mvc asp.net-mvc-3 autofac asp.net-mvc-3-areas

我正在使用MVC Extension with Autofac,我遇到了问题。我不确定我做错了什么。

最初,我在global.asax.cs中有以下内容:

public class MvcApplication : AutofacMvcApplication
{
     public MvcApplication()
     {
          Bootstrapper.BootstrapperTasks
               .Include<RegisterControllers>();
     }
}

protected override void OnStart()
{
     AreaRegistration.RegisterAllAreas();

     RegisterGlobalFilters(GlobalFilters.Filters);
     RegisterRoutes(RouteTable.Routes);

     base.OnStart();
}

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
     filters.Add(new HandleErrorAttribute());
}

public static void RegisterRoutes(RouteCollection routes)
{
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

     routes.MapRoute(
          "Default", // Route name
          "{controller}/{action}/{id}", // URL with parameters
          new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
     );
}

使用此代码,我的区域显示良好。 http://localhost:19857/Administration显示我的索引视图。

如果我希望MVC Extensions为我注册我的路线和区域,那么http://localhost:19857/Administration不会显示任何内容,只会出现404错误。

这是更新的global.asax.cs注册我的路线和区域:

public class MvcApplication : AutofacMvcApplication
{
     public MvcApplication()
     {
          Bootstrapper.BootstrapperTasks
               .Include<RegisterAreas>()
               .Include<RegisterControllers>()
               .Include<RegisterRoutesBootstrapperTask>();
     }

     protected override void OnStart()
     {
          RegisterGlobalFilters(GlobalFilters.Filters);

          base.OnStart();
     }

     public static void RegisterGlobalFilters(GlobalFilterCollection filters)
     {
          filters.Add(new HandleErrorAttribute());
     }
}

我的RegisterRoutesBootstrapperTask class

public class RegisterRoutesBootstrapperTask : RegisterRoutesBase
{
     public RegisterRoutesBootstrapperTask(RouteCollection routes)
          : base(routes)
     {
     }

     protected override void Register()
     {
          Routes.Clear();

          Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

          Routes.MapRoute(
               "Default",
               "{controller}/{action}/{id}",
               new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
          );
     }
}

为什么我的区域不显示?

更新

当我转到http://localhost:19857/Administration时,默认为Dashboard控制器索引视图。这是我所在地区的注册码:

public override string AreaName
{
     get
     {
          return "Administration";
     }
}

public override void RegisterArea(AreaRegistrationContext context)
{
     context.MapRoute(
          "Administration_default",
          "Administration/{controller}/{action}/{id}",
          new { controller = "Dashboard", action = "Index", id = UrlParameter.Optional }
     );
}

1 个答案:

答案 0 :(得分:1)

我似乎已经解决了这个问题。问题出在Routes.Clear();我把它拿出来,现在一切正常。以下是我对上述代码所做的更改:

public class RegisterRoutesBootstrapperTask : RegisterRoutesBase
{
     public RegisterRoutesBootstrapperTask(RouteCollection routes)
          : base(routes)
     {
     }

     protected override void Register()
     {
          Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

          Routes.MapRoute(
               "Default",
               "{controller}/{action}/{id}",
               new { controller = "Home", action = "Index", id = UrlParameter.Optional }
          );
     }
}

这是我更新的global.asax.cs

public class MvcApplication : AutofacMvcApplication
{
     public MvcApplication()
     {
          Bootstrapper.BootstrapperTasks
               .Include<RegisterAreas>()
               .Include<RegisterControllers>()
               .Include<RegisterRoutesBootstrapperTask>()
               .Include<AutoMapperBootstrapperTask>();
     }
}