9

我有一个包含一些区域的 MVC 4 Web 应用程序。我对名为“目录”的区域的路由规则有疑问。RouteConfig.cs 文件是:

    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 },
        );
    }

和 Global.asax 如下:

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

CatalogAreaRegistration 是这样的:

public class CatalogAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Catalog";
        }
    }

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

问题是当我调试时,RouteCollection 路由不包含该区域中定义的规则。我使用了 routedebugger,发现路由集合不包含“目录”区域的规则。它只有 RouteConfig 中的规则。

我不知道是什么问题。提前致谢。

4

2 回答 2

20

我认为由于 Visual Studio 的缓存,一些 dll 没有正确编译,这种情况可能会发生。如果这样做,请从以下位置删除所有临时文件:

  • C:\温度
  • C:\Users\%Username%\AppData\Local\Microsoft\VisualStudio
  • C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET 文件
  • C:\Windows\Microsoft.NET\Framework64\v4.0.30319\临时 ASP.NET 文件
  • Path\To\Your\Project\obj\Debug

更新 :

  • AppData\Local\Temp\Temporary ASP.NET 文件

然后重新启动 Visual Studio。我就是这样解决的。

于 2013-08-20T17:07:33.027 回答
1

只需将控制器的命名空间添加到 AreaRegistration:

public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            **namespaces: new string[] { "Web.Admin.Controllers" }**
        );
    }
于 2014-04-19T20:23:13.823 回答